数学建模——线性规划

线性规划模型的一般形式

    要素:

              (1)目标函数;  (2)约束条件;  (3)决策变量

    一般形式:

     决策变量为X_{1}, X_{2}

 

转化为Python输入的标准形式为

                    

 

                      其中的要素均为矩阵形式。

 

用Python解决线性规划问题

 

1、使用scipy的linprog()

 

linprog(c, A_ub, b_ub, A_eq, b_eq, bounds)

from scipy.optimize import linprog
'''
min z = C't X                c就是z中x的系数矩阵
s.t. :
        A·X<=b              关于不等号的约束
        Aeq·X = beq         关于等号的约束
        Lb <= X <= Ub       决策向量的下界向量和上界向量
        
linprog(c, A, b, Aeq, beq, bounds)   除bounds是元组,其他的都是数组 '''

'''
例子:
    min z = -x1+4x2
s.t.:
    -3x1+2x2<=6
      x1+2x2<=4
          x2>=-3'''

c = [-1, 4]
A = [[-3, 2], [1, 2]]
b = [6, 4]
bounds = ((None, None), (-3, None))
res = linprog(c, A, b, None, None, bounds)          # 函数返回值是一个字典
print("                 等式约束的残差(名义上为零):", res.con,
      "\n                          目标函数的最小值:", res.fun,
      "\n                  算法退出状态的字符串描述符:", res.message,
      "\n                           当前的迭代数量:", res.nit,
      "\n            不等式约束的松弛值(名义上为正值):", res.slack,
      "\n                     表示算法退出状态的整数:", res.status,
      "\n                算法是否成功找到最佳解决方案:", res.success,
      "\n在满足约束的情况下将目标函数最小化的决策变量的值:", res.x)
print(res)


 

函数返回值是一个字典:
等式约束的残差(名义上为零): 

                                                     res.con
目标函数的最小值:

                                                     res.fun
算法退出状态的字符串描述符:,

                                                    res.message
当前的迭代数量:,

                                                    res.nit
不等式约束的松弛值(名义上为正值):,

                                                    res.slack
表示算法退出状态的整数:,

                                                    res.status
算法是否成功找到最佳解决方案:,

                                                    res.success
在满足约束的情况下将目标函数最小化的决策变量的值:

                                                    res.x

 


若求最大值,可通过-z得到求最小值的问题,如
    max z =  X_{1 }+5X_{2}+6X_{3}
    min w = -X_{1}-5X_{2}-6X_{3}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值