一、线性规划
(1)定义决策变量
(1)构造目标函数
(2)寻找限制条件
(4)按照步骤带入Matlab函数
假设题目:
m
i
n
Z
=
c
x
min\quad Z=cx
minZ=cx
s.t.
{
A
x
≤
b
A
e
q
⋅
x
=
b
e
q
l
b
≤
x
≤
u
b
\begin{cases} Ax≤b \\ Aeq·x=beq \\ lb≤x≤ub \end{cases}
⎩
⎨
⎧Ax≤bAeq⋅x=beqlb≤x≤ub
其中,系数皆为列向量
c=-[5,3]';
A=[2,1;1,2];
b=[40,50]';
L=[0, 0];
[x,fmin]=linprog(c,A,b,[],[],lb);
Pmax=-fmin
x1=x(1)
x2=x(2)
其中,
[x,fval]=linprog(c,A,b)
[x,fval]=linprog(c,A,b,Aeq,beq)
[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
可以增加输出:
[x, fval, exitflag, output] = linprog(c, A, b, …)
fval:最优值
exitflag:
>0:收敛
=0: 到最大迭代次数时都还未收敛
<0:infeasible或方法失败
output:迭代次数和算法类型
二、非线性规划
H=[1 -1; -1 2];
c=[-2 ;-6];
A=[1 1; -1 2];
b=[2;2];
Aeq=[];
beq=[];
VLB=[0;0];
VUB=[];
[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)
三、将多目标规划问题转化为线性规划模型:
例:两个目标函数的情况下
- 为其中一个目标函数A设定目标值,使其满足小于(大于)一定的目标值a即满足约束条件
此时该目标函数A即转化为约束条件
只有一个目标函数B,满足线性规划模型求解
方法1求解
例如当目标函数<a,a=0时开始,a每次增长0.001,满足a<0.05
matlab求解时,使用while函数
clc,clear
a=0;
hold on;
while a<0.05
c= A= b= Aeq= beq= ;
[x,Q]=linprog(c,A,b,Aeq,beq,lb);
Q=-Q;
plot(a,Q,'*k');
a=a+0.001;
end
xlabel('a'),ylabel('Q')
方法1分析
分析转折点处的值:在不同情况下,优先选取对应折线的拐点处的值
- 分别为目标函数A,B设立权重值s,将原目标函数转化为
Z=sA±(1-s)B
即可以用线性规划模型求解