文章目录
一、用Excel和python编程完成线性规划问题的求解
第一步 建立数据源
第二步 数据约束条件
第三步 加载规划求解加载项
注意 先转到再确定
第四步 设置规划求解参数
选择目标和设置参数
第五步 添加依赖关系
根据题目添加对应依赖关系
1000x1+2000x2<=30000的关系:
x1+x2>=20的关系:
1000x1+2000x2+400x3+1000x4+100x5<=40000的关系:
2000x1+4000x2+3000x3+5000x4+600x5>=100000的关系:
x1,x2,x3,x4,x5为正整数且小于对应最大值:
第六步 得结果
代码实现
环境为python3.0
下载numpy包和scipy包
pip install numpy
pip install scipy
代码如下:
import numpy as np
from scipy import optimize as op
#定义决策变量范围
x1=(0,14)
x2=(0,8)
x3=(0,40)
x4=(0,5)
x5=(0,50)
#定义目标函数系数
c=np.array([600,800,500,400,300])
#定义约束条件系数
A_ub=np.array([[1000,2000,0,0,0],[-1,-1,0,0,0]
,[1000,2000,400,1000,100]
,[-2000,-4000,-3000,-5000,-600]])
B_ub=np.array([30000,-20,40000,-100000])
#求解
res=op.linprog(-c,A_ub,B_ub,bounds=(x1,x2,x3,x4,x5))
print(res)
得出结果:
我们会发现得出的值无法限制为整数,网上也没找到解决问题的方法,需要其他库,请指点。
二、用拉格朗日方法求解,手工求解和编程求解
下载sympy包
pip install sympy
代码如下:
from sympy import *
x,y,z,k = symbols('x,y,z,k')
a,b,c=symbols('a,b,c')
f = 8*x*y*z
g = x**2/a**2+y**2/b**2+z**2/c**2-1
L=f+k*g
dx = diff(L, x) # 对x求偏导
print("dx=",dx)
dy = diff(L,y) #对y求偏导
print("dy=",dy)
dz = diff(L,z) #对z求偏导
print("dz=",dz)
dk = diff(L,k) #对k求偏导
print("dk=",dk)
m= solve([dx,dy,dz,dk],[x,y,z,k])
print(m)
#变量赋值
x=sqrt(3)*a/3
y=sqrt(3)*b/3
z=sqrt(3)*c/3
#计算方程的值
f = 8*x*y*z
print("内接长方体的最大体积:",f)
偏导结果:
结果:
最大体积: