数学建模线性规划的matlab应用

多种优化模型的MATLAB求解(一)

线性规划

linear programming,LP问题
对于满足表达式的一个或多个等式与不等式约束条件的去决定一个线性目标函数的最大值或最小值的优化问题。
目 标 函 数 : m a x ( 或 m i n ) z = c T x 目标函数:max(或min)z=c^Tx max(min)z=cTx
{ A ⋅ x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b \begin{cases} A \cdot x {\leq b }\\ Aeq \cdot x=beq\\ lb \leq x \leq ub \end{cases} AxbAeqx=beqlbxub
c和x都是 n维列向量,
A,Aeq为适当维数的矩阵,
b,beq,为适当维数的列向量。

MATLAB优化工具箱实现线性规划

由上述公式可得
利用MATLAB优化工具箱函数linprog实现

(1)[x,z]=linprog(c,A,b,Aeq,beq,lb,ub)

输入相对应的是上述的变量
x:最优解
z:最优值

(2)[x,z,exitflag]=linprog(c,A,b,Aeq,beq,lb,ub)

输出的第三项返回一个整数,描述该函数linprog结束的原因
1:目标函数在x处收敛
0:迭代次数超过option.MaxIter
-2:问题没有可行解
-3:问题的可行域无界
-4:在算法执行过程中遭遇特殊值NaN
-5:原问题和对偶问题都是不可行的(至于对偶问题百度吧这里涉及了运筹学的知识)
-6:搜索方向太小不能计算下去

(3)[x,z,exitflag,output]=linprog(c,A,b,Aeq,beq,lb,ub)

第四项输出一个包含优化信息的结构数组。

(4)[x,z,exitflag,output,lambda]=linprog(c,A,b,Aeq,beq,lb,ub)

lambda是一个结构数组,包含在最优解c处不同优化类型的拉格朗日乘子信息。
lower 决策变量的下界限制lb对应的拉格朗日乘子列向量;
upper决策变量的上界限制ub对应的拉格朗日乘子列向量;
ineqlin不等式约束对应的拉格朗日乘子列向量;
eqlin等式约束对应的拉格朗日乘子列向量;

例:

m a x : 13 x 1 + 9 x 2 + 10 x 3 + 11 x 4 + 12 x 5 + 8 x 6 max: 13x_1+9x_2+10x_3+11x_4+12x_5+8x_6 max:13x1+9x2+10x3+11x4+12x5+8x6
{ 0.6 x 1 + 1.2 x 2 + 1.1 x 3 ≤ 600 0.4 x 4 + 1.2 x 5 + x 6 ≤ 900 x 1 + x 4 = 400 x 2 + x 5 = 600 x 3 + x 6 = 500 \begin{cases} 0.6x_1+1.2x_2+1.1x_3 \leq600 \\ 0.4x_4+1.2x_5+x_6 \leq 900 \\ x_1+x_4 = 400\\ x_2+x_5 = 600\\ x_3+x_6 = 500 \end{cases} 0.6x1+1.2x2+1.1x36000.4x4+1.2x5+x6900x1+x4=400x2+x5=600x3+x6=500
部分数据未知时,用[]代替。
MATLAB代码为:

c = [13;9;10;11;12;8];
A = [0.6 1.2 1.1 0 0 0 ;0 0 0 0.4 1.2 1.0];
b = [600;900];
Aeq = [1 0 0 1 0 0;0 1 0 0 1 0;0 0 1 0 0 1];
beq = [400 600 500];
lb = zeros(6,1);
[x,z,exitflag,output,lambda] = linprog(c,A,b,Aeq,beq,lb);

输出

x =

         0
  500.0000
         0
  400.0000
  100.0000
  500.0000


z =

       14100


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 4
    constrviolation: 5.6843e-14
            message: 'Optimal solution found.'
          algorithm: 'dual-simplex'
      firstorderopt: 2.8422e-13


lambda = 

  包含以下字段的 struct:

      lower: [6×1 double]
      upper: [6×1 double]
      eqlin: [3×1 double]
    ineqlin: [2×1 double]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小牛马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值