线性/非线性规划问题求解

一、用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)

得出结果:
在这里插入图片描述
我们会发现得出的值无法限制为整数,网上也没找到解决问题的方法,需要其他库,请指点。

二、用拉格朗日方法求解,手工求解和编程求解

参考博客:Python实现拉格朗日求解最优问题【椭圆内接长方体的最大体积】

在这里插入图片描述

下载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)

偏导结果:
在这里插入图片描述
结果:
在这里插入图片描述

最大体积:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值