文章目录
一、学习任务
1.用Excel和python编程完成线性规划问题的求解。
2.用拉格朗日方法求解,手工求解和编程求解。
二、学习内容
1. 用Excel和python编程完成线性规划问题的求解。
1.1 问题内容
Excel求解线性规划的实际案例-广告媒体组合优化问题
提取码:eewh
1.2 Excle实现线性规划
1.创建数据源,将下面数据输入表格
2.表格中设置目标函数
3. 表格中设置约束条件
4.使用数据规划设置决策变量,目标函数和约束条件
4.1设置目标函数和决策变量
4.2.设置约束条件
约束条件1
约束条件2
约束条件3
约束条件4
约束条件5
约束条件6
约束 条件7
5.最终结果
1.2.Python编程实现线性规划
1.使用scipy库对线性规划的最优解、最大值进行求解
代码如下
from scipy import optimize
import numpy as np
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],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]])
B_ub=np.array([30000,-20,40000,-100000,14,8,40,5,50])
# 求解
res=optimize.linprog(-c,A_ub,B_ub)
print(res)
2.结果 如下
2.用拉格朗日方法求解,手工求解和编程求解
2.1.拉格朗日手工求解问题
1.构造拉格朗日函数
2.解变量的偏导方程,对每个变量进行求偏导,得到一个关于变量的方程组如下
求解结果如下:
3.带入目标函数
2.2.拉格朗日编程求解问题
1.相关代码
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)
print("dx=",dx)
dy = diff(L,y)
print("dy=",dy)
dz = diff(L,z)
print("dz=",dz)
dk = diff(L,k)
print("dk=",dk)
dx= 8*y*z + 2*k*x/a**2
dy= 8*x*z + 2*k*y/b**2
dz= 8*x*y + 2*k*z/c**2
dk= -1 + z**2/c**2 + y**2/b**2 + x**2/a**2
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
k=-4*sqrt(3)*a*b*c/3
f = 8*x*y*z
print("方程的最大值为:",f)
2.diff函数求解的偏导结果
3.solve函数求解变量的结果
4.最终结果