前言
最近跟着B站学 数模 与 Python,试着将"数学建模老哥"的 Matlib 代码翻译为 Python 代码。
这篇文章中的内容可以用于 numpy,scipy.optimize,matplotlib 的综合训练。
里面涉及到的线性规划问题处理思想也很耐人寻味。
“数学建模老哥”的内容截图
原问题:求下列线性规划问题的最优值
a 要通过迭代尝试,寻找最优值。
“数学建模老哥”的 matlib 源码截图
运行结果
尝试使用 Python 解决
环境:jupyter notebook(Ipython)
包:numpy,matplotlib,scipy
代码:
建议使用 jupyter 进行数据分析操作,实在太丝滑了。
import numpy as np
import scipy.optimize as opt
import matplotlib.pyplot as plt
# 结果列表
res=[]
# 迭代 a
for a in np.linspace(0.0,0.05,num=50):
# 价值矩阵
c=np.array([-0.05,-0.27,-0.19,-0.185,-0.185])
# 不等式约束矩阵
A=np.array([[0,0.025,0,0,0],[0,0,0.015,0,0],[0,0,0,0.055,0],[0,0,0,0,0.026]])
# 等式约束矩阵
Aeq=np.array([[1,1.01,1.02,1.045,1.065]])
# 价值矩阵1
b=np.array([a,a,a,a])
# 价值矩阵2
beq=np.array([1])
# 边界约束
x_bound=(0,None)
# 计算
temp=opt.linprog(c,A_ub=A,b_ub=b,A_eq=Aeq,b_eq=beq,bounds=x_bound)
# 保存结果,(a,最优值)
res.append((a,temp.fun))
# 设置轴上数值
axis_a=[i[0] for i in res]
axis_f=[-i[1] for i in res] # 为什么加 "-",去看 "老哥" 视频吧
# 绘制散点图
plt.scatter(x=axis_a,y=axis_f)
最后问问,通过这个图,你们知道怎么取最优解了吗?