|
该函数的约束包括A·x ≤ b,Aeq·x = beq,l ≤ x ≤ u。用于线性规划求解的函数为linprog函数,该函数的调用格式如下:
- x = linprog(f,A,b)
- x = linprog(f,A,b,Aeq,beq)
- x = linprog(f,A,b,Aeq,beq,lb,ub)
- x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
- x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
- x = linprog(problem)
- [x,fval] = linprog(...)
- [x,fval,exitflag] = linprog(...)
- [x,fval,exitflag,output] = linprog(...)
- [x,fval,exitflag,output,lambda] = linprog(...)
复制代码 其中,f为f T x 中的fT ,x为返回的x;A为不等式约束系数矩阵,b为不等式约束的右项;Aeq为等式约束的左项,beq为等式约束的右项;lb、ub分别为x的下限和上限;x0为初始求解点,options为optimset命令设置的选项。fval为求解函数的值;exitflag描述退出条件;output为优化信息数据;lambda参数是解x处的拉格朗日乘子。它有以下一些属性:
- lambda.lower——lambda的下界;
- lambda.upper——lambda的上界;
- lambda.ineqlin——lambda的线性不等式;
- lambda.eqlin——lambda的线性等式。
此外,MATLAB还提供了bintprog函数用于二进制整数的线性优化。
例11-5,求0.002614 HPS + 0.0239 PP + 0.009825 EP的最小值,约束条件如下:
- 2500 ≤ P1 ≤ 6250
- I1 ≤ 192,000
- C ≤ 62,000
- I1 - HE1 ≤ 132,000
- I1 = LE1 + HE1 + C
- 1359.8I1 = 1267.8 HE1 + 1251.4 LE1 + 192 C + 3413 P1
- 3000 ≤ P2 ≤ 9000
- I2 ≤ 244,000
- LE2 ≤ 142,000
- I2 = LE2 + HE2
- 1359.8I2 = 1267.8 HE2 + 1251.4 LE2 + 3413 P2
- HPS= I1 + I2 + BF1
- HPS = C + MPS +
- LPSLPS = LE1 + LE2 + BF2
- MPS = HE1 + HE2 + BF1 - BF2
- P1+ P2 + PP ≥ 24,550
- EP+ PP ≥ 12,000
- MPS ≥ 271,536
- LPS ≥ 100,623
复制代码 且所有变量均为正。
在命令行窗口输入:
- %将所有变量名存储到向量中
- variables = {'I1','I2','HE1','HE2','LE1','LE2','C','BF1',
- 'BF2','HPS','MPS','LPS','P1','P2','PP','EP'};
- N = length(variables);
- %创建变量编号
- for v = 1:N
- eval([variables{v},' = ', num2str(v),';']);
- end
- %写出目标函数
- f = zeros(size(variables));
- f([HPS PP EP]) = [0.002614 0.0239 0.009825];
- %写出边界条件
- lb = zeros(size(variables));
- lb([P1,P2,MPS,LPS]) = [2500,3000,271536,100623];%下边界
- ub = Inf(size(variables));
- ub([P1,P2,I1,I2,C,LE2]) = [6250,9000,192000,244000,62000,142000];%上边界
- %写出不等式约束
- A = zeros(3,16);
- A(1,I1) = 1; A(1,HE1) = -1; b(1) = 132000;
- A(2,EP) = -1; A(2,PP) = -1; b(2) = -12000;
- A(3,[P1,P2,PP]) = [-1,-1,-1];
- b(3) = -24550;
- %写出等式约束
- Aeq = zeros(8,16); beq = zeros(8,1);
- Aeq(1,[LE2,HE2,I2]) = [1,1,-1];
- Aeq(2,[LE1,LE2,BF2,LPS]) = [1,1,1,-1];
- Aeq(3,[I1,I2,BF1,HPS]) = [1,1,1,-1];
- Aeq(4,[C,MPS,LPS,HPS]) = [1,1,1,-1];
- Aeq(5,[LE1,HE1,C,I1]) = [1,1,1,-1];
- Aeq(6,[HE1,HE2,BF1,BF2,MPS]) = [1,1,1,-1,-1];
- Aeq(7,[HE1,LE1,C,P1,I1]) = [1267.8,1251.4,192,3413,-1359.8];
- Aeq(8,[HE2,LE2,P2,I2]) = [1267.8,1251.4,3413,-1359.8];
- %求解:
- [x fval] = linprog(f,A,b,Aeq,beq,lb,ub);
- for d = 1:N
- fprintf('%s\t\t %12.2f \n',variables{d},x(d))
- end
- fval
复制代码 输出结果如下:- Optimization terminated.
- I1 136328.74
- I2 244000.00
- HE1 128159.00
- HE2 143377.00
- LE1 0.00
- LE2 100623.00
- C 8169.74
- BF1 0.00
- BF2 0.00
- HPS 380328.74
- MPS 271536.00
- LPS 100623.00
- P1 6250.00
- P2 7060.71
- PP 11239.29
- EP 760.71
- fval = 1.2703e+03
复制代码
|
|