python01规划问题最小值,使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)...

1.线性规划模型:

418d14cf5e624a6bbc1a4b398cd7f450.png

2.使用python scipy.optimize linprog求解模型最优解:

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simplex', callback=None, options=None)

method = 'simplex'(单纯形法),bounds确定边界,x≥0为(0,None)。

要使用linprog,目标函数要变成求最小值,如果原题目要求求max(最大值),只需对目标函数取负,但要注意求解的最终值是取负后的目标函数的最小值,取负即为最大值。

下面为具体python代码:

importnumpy as npfrom scipy.optimize importlinprog

c= np.array([1,2,3])

A_ub= np.array([[-2,1,1],[3,-1,-2]])

b_ub= np.array([9,-4])

A_eq= np.array([[3,-2,-3]])

b_eq= np.array([-6])

r= linprog(c,A_ub,b_ub,A_eq,b_eq,bounds=((None,0),(0,None),(None,None)))print(r)

程序的输出结果为:

fun: -22.0

message: 'Optimization terminated successfully.'

nit: 3

slack: array([ 0., 7., 0.])

status: 0

success: True

x: array([-7., 0., -5.])

fun为目标函数的最优值,slack为松弛变量,status表示优化结果状态,在这里不用过于追究,x为最优解。

最优解为-22

3.使用lingo进行线性规划:

当模型不是很大是可以用lingo求解,下面为lingo求解过程:

-----------------------------------------------------------------------------------------------------------------------

min=x1+2*x2+3*x3;

-2*x1+x2+x3<=9;

-3*x1+x2+2*x3>=4;

3*x1-2*x2-3*x3=-6;

x1<=0;

@free(x1);@free(x3);

-----------------------------------------------------------------------------------------------------------------------

目标函数使用max=或者min=表示,注意不是max z=。在lingo中变量默认为非负,使用@free可以解除限制。注意每一行结束要是用“;”,这点跟c类似。

求解结果为:

Objective value:                             -22.00000

Variable Value

X1          -7.000000

X2          0.000000

X3          -5.000000

结果跟python相同。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值