本文章为上篇建模学习打卡第二天的续
文章目录
一、本次问题
二、本题理解
目标函数:
max = 40x1+90x2
一级约束条件:
9x1+7x2<=56
7x1+20x2<=70
x1,x2 >= 0
二级约束条件:
x1,x2全为整数
三、问题求解
1.lingo实现
lingo编写代码时,每行代码结束后必须以 ‘ ; ’ 结束,否则无法运行。
(1)先抛除整数约束条件对问题求解
基础线性规划实现(matlab,lingo)_菜菜笨小孩的博客-CSDN博客
lingo代码实现:(l无其他条件下,ingo中默认变量大于等于0)
max = 40*x1+90*x2;
9*x1+7*x2<=56;
7*x1+20*x2<=70;
结果:最优解 x1=4.80916 , x2 = 1.816794 ; 最优值为355.8779;显然不符合题意
(2)加入整数约束条件求解
首先,需要引出lingo的变量界定函数 @gin(x) --- 将x限制为整数条件
ingo代码实现:通过变量界定函数将x1,x2限制为整数约束
max = 40*x1+90*x2;
9*x1+7*x2<=56;
7*x1+20*x2<=70;
@gin(x1);
@gin(x2);
结果:最优解 x1=4 , x2 = 2 ; 最优值为340;符合题意
lingo实现求解到此结束。
2.python实现求解
(1)先抛除整数约束条件对问题求解
基础线性规划实现---python_菜菜笨小孩的博客-CSDN博客
python代码实现如下:详解请看上方python基础线性规划的文章
#导入包
from scipy import optimize as opt
import numpy as np
#确定c,A,b,Aeq,beq
c = np.array([40,90]) #目标函数变量系数
A = np.array([[9,7],[7,20]]) #不等式变量系数
b = np.array([56,70]) #不等式变量值
Aeq = np.array([[0,0]]) #等式变量系数
beq = np.array([0]) #等式变量值
#限制
lim1=(0,None)
lim2=(0,None)
#求解
res = opt.linprog(-c,A,b,Aeq,beq,bounds=(lim1,lim2))
#输出结果
print(res)
结果:最优解 x1=4.80916 , x2 = 1.816794 ; 最优值为355.8779;显然不符合题意