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

1.线性规划模型:

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

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相同。

你可能感兴趣的:(python01规划问题最小值)