数学建模 - 线性和整数编程 - Matlab 解决优化问题
matlab内置有优化工具箱,可以解决绝大多数优化问题
Optimization Toolbox™ 提供了寻找最小化或最大化目标并同时满足约束条件的函数。工具箱中包括了线性规划 (LP)、混合整数线性规划 (MILP)、二次规划 (QP)、非线性规划 (NLP)、约束线性最小二乘法、非线性最小二乘和非线性方程的求解器。
详见Optimization Toolbox官方网站
或https://blog.****.net/cclethe/article/details/77200997
matlab常用解决优化问题的函数有:
转自头条号/算法集市
对于整数规划问题,matlab内置了intlinprog函数
函数命令为:
[x, fval]=intlinprog(f, intcon, A, b, Aeq, beq, lb, ub)
其中变量intcon是有整数要求的决策变量的下标组成的列向量,其余变量与线性规划相同。
数学模型为:
min
x
f
T
x
,
s
.
t
.
{
x
(
i
n
t
c
o
n
)
为
整
数
A
⋅
x
⩽
b
A
e
q
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
\min_x\textbf{f}^T\textbf{x},\\ s.t.\begin{cases} \textbf{x}(intcon)为整数\\ \textbf{A}\cdot\textbf{x}\leqslant\textbf{b}\\ Aeq\cdot\textbf{x}=beq\\ lb\leqslant\textbf{x}\leqslant ub \end{cases}
xminfTx,s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧x(intcon)为整数A⋅x⩽bAeq⋅x=beqlb⩽x⩽ub
intlinprog函数中的决策变量只能是一维,因此只有将二维决策变量转化为一维才能继续使用该函数
例:
以下指派问题中指派矩阵为:
[
3
8
2
10
3
8
7
2
9
7
6
4
2
7
5
8
4
2
3
5
9
10
6
9
10
]
\begin{bmatrix} 3&8&2&10&3\\ 8&7&2&9&7\\ 6&4&2&7&5\\ 8&4&2&3&5\\ 9&10&6&9&10 \end{bmatrix}
⎣⎢⎢⎢⎢⎡3868987441022226109739375510⎦⎥⎥⎥⎥⎤
将二维决策变量xij(i,j=1,2,3,4,5)变为一维决策变量yk(k=1,2,3,…,25)
matlab代码:
c=[3,8,2,10,3;8,7,2,9,7;6,4,2,7,5;8,4,2,3,5;9,10,6,9,10];
c=c(:); a=zeros(10,25); intcon =1:25;
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b = ones(10,1);
lb = zeros(25,1);
ub = ones(25,1);
x = intlinprog(c,intcon,[],[],a,b,lb,ub);
x = reshape(x,[5,5])
输出:
>>
LP: Optimal objective value is 21.000000.
Optimal solution found.
Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value,
options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance,
options.IntegerTolerance = 1e-05 (the default value).
x =
0 0 0 0 1
0 0 1 0 0
0 1 0 0 0
0 0 0 1 0
1 0 0 0 0
>>
若问题中决策变量为一维,则与线性规划无太大差别。
参考文献:
[1]司守奎,孙兆亮.数学建模算法与应用[M].第二版.北京:国防工业出版社,2018.
[2]部分资料来源于互联网
上一篇: [算法统治世界]动态编程个人笔记摘要
下一篇: 深入了解动态编程算法 - 压缩整数
推荐阅读
-
矩阵范式和优化问题:解决线性和非线性编程问题
-
MATLAB 解决线性规划(含整数规划和 0-1 规划)问题 [简单易懂]
-
MATLAB 解决线性规划(包括整数规划和 0-1 规划)问题
-
[数学建模算法] (5) 整数编程应用实例:生产和销售计划问题
-
MATLAB 解决线性规划(包括整数规划和 0-1 规划)问题
-
数学建模 - 线性和整数编程 - Matlab 解决优化问题
-
[推荐阅读 - 优化中的 R 语言]使用 Rglpk 软件包解决线性规划和整数规划问题
-
MATLAB 解决线性规划(包括整数规划和 0-1 规划)问题 [易于理解] - [x,fval,exitflag]= intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
-
[数学建模算法](号外 1)用于解决整数编程问题的 Matlab 函数 intlinprog
-
数学建模】2021 年美国锦标赛 B 级问题解决方案(森林火灾和无人机布局) 【包括 Matlab 源代码 247 期