线性/非线性规划问题求解
文章目录
用Excel和python编程完成线性规划问题的求解。
线性规划的基本思想
为求决策变量,需要将目标函数、约束条件表达为决策变量的函数式。若约束条件和目标函数都是线性的,即表示约束条件的数学式子是线性等式或线性不等式,表示问题最优化指标的目标函数都是线性函数,则该问题是线性规划问题。
Excel完成线性规划问题的求解
- 建立数据源
- 写出资源配置三要素
设日间电视、夜间电视、网络媒体、平面媒体、户外广告的使用次数依次为x1,x2,x3,x4,x5,咨询电话量为L,则5种媒体资源配置的三要素如下。
(1)决策变量:x1,x2,x3,x4,x5.
(2)目标函数(s.t.):咨询电话量L=600x1+800x2+500x3+400x4+300x5最大化
(3)所满足的约束条件:
- 电视广告费用不超过3万元,1000x1+2000x2<=30000.
- 电视广告次数至少进行20次,x1+x2>=20.
- 广告总费用不超过4万元,1000x1+2000x2+400x3+1000x4+100x5<=40000。
- 被告知人数至少10万人/次:2000x1+4000x2+3000x3+5000x4+600x5>=100000
- 各媒体使用次数不超过次数限量:x1<=14;x2<=8;x3<=40;x4<=5,x5<=50
- 各媒体使用次数均为正整数。
-
在Excel中设置目标函数
-
在Excel中设置约束条件
-
加载Ecxcel的规划求解模块
(1)文件–选项
(2)
(3)选择规划求解模块
-
在Excel规划求解模块中设置约束条件
(1)添加一个约束条件
(2)约束条件添加结果
-
结果
(1)讲求得的结果输出到表 -
得出规划求解结果
使用python完成线性规划问题的求解
试试scipy模块下的scipy.optimize.linprog函数来跑数据。
调用该函数需要注意的点:
这个函数只做“最小化”的优化,如果要做“最大化”,在目标函数上取负值就行,本文中的例子就是要找“最大值”;
等式和不等式两类约束条件是分开的,分别对应两组参数A,b(注意下标的含义);
这里的不等式要求<=,如果约束条件中出现>=则在两边乘以-1以调换方向;
注意在矩阵A中补齐参数为0的情况,比如一共5个决策变量,有个约束条件是-x1-x2<=-20,对应的参数array是[-1,-1,0,0,0];
# 决策条件,约束条件,目标函数与上面一样
from scipy import optimize # 需要优化的函数对应的参数listc=[-600,-800,-500,-400,-300]
c=[-600,-800,-