人工智能第五周实验线性规划问题求解

一、线性规划问题求解

1、excel求解广告媒体组合优化问题建立数据源在excel中建立下表
人工智能第五周实验线性规划问题求解_第1张图片
2.写出资源配置三要素
设日间电视、夜间电视、网络媒体、平面媒体、户外广告的使用次数以此为x1,x2,x3,x4,x5,x6,咨询电话量为L,则5种媒体资源配置的要素如下:①决策变量:x1,x2,x3,x4,x5,x6②目标函数(s,t):咨询电话量为L=600x1+800x2+500x3+400x4+300x5最大化③所满足的约束条件:电视广告费不超过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;各媒体使用次数均为正整数。
3.在excel中设置目标函数
由前面的分析可知,目标函数为E2:E6与F2:F6区域两列数组对应元素的乘积之和,在C10单元格中输入“=SUMPRODUCT(E2:E6,F2:F6)”
人工智能第五周实验线性规划问题求解_第2张图片
4.设置约束条件
将第二步中的约束条件设置在excel中。注意加载excel规划求解模块
选择文件->选项->加载项->转到,勾选规划求解加载项,单击确定。可以在数据中看到规划求解模块细节,公式有等号,约束对象那列内容与公式一列内容相同,只不过是显示的为0
人工智能第五周实验线性规划问题求解_第3张图片
5.加载excel规划求解模块
选择文件->选项->加载项->转到,勾选规划求解加载项,单击确定。可以在数据中看到规划求解模块
人工智能第五周实验线性规划问题求解_第4张图片
6.在求解模块中设置决策变量和目标函数
点击规划求解参数,在弹出的窗口进行操作人工智能第五周实验线性规划问题求解_第5张图片
在添加中根据第2步的约束条件添加。添加内容为上图中 遵守约束 中的7条
人工智能第五周实验线性规划问题求解_第6张图片
7.结果
点击求解以后,选择保留规划求解的解,
人工智能第五周实验线性规划问题求解_第7张图片
点击确定后可以看到最优媒体组合,即当日间电视、夜间电视、网络媒体、平面媒体、户外广告5中媒体的使用次数分别为14次、6次、23次、0次、48次时咨询电话量最大,达到39100次
人工智能第五周实验线性规划问题求解_第8张图片
2、Python求解广告媒体组合优化问题
根据上面第二步的分析,使用python求解组合优化问题导入scipy,使用矩阵求解

L=600x1+800x2+500x3+400x4+300x5
x1<=14,x2<=8,x3<=40,x4<=5,x5<=50
#导入包
from scipy import optimizeimport numpy as np#确定c,A_ub,B_ubc = 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)

人工智能第五周实验线性规划问题求解_第9张图片

二、非线性规划问题求解

1、拉格朗日方法求解椭球的内接长方体的最大体积拉格朗日乘子法在数学最优问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数:约束方程的梯度(gradient)的线性组合里每个向量的系数
人工智能第五周实验线性规划问题求解_第10张图片

①手工求解
这里借鉴别人的手写结果图:
人工智能第五周实验线性规划问题求解_第11张图片
通过Python求解:

#拉格朗日求解线性规划最大值和最优解
#导入sympy包,用于求导,方程组求解等等from scipy.optimize import minimizeimport numpy as npe = 1e-10#目标函数:fun = lambda x : 8 * (x[0] * x[1] * x[2])#约束条件,包括等式约束和不等式约束cons = ({'type': 'eq', 'fun': lambda x: x[0]**2+ x[1]**2+ x[2]**2 - 1},         {'type': 'ineq', 'fun': lambda x: x[0] - e},        {'type': 'ineq', 'fun': lambda x: x[1] - e},        {'type': 'ineq', 'fun': lambda x: x[2] - e}       )#设置初始值,x0 = np.array((1, 1, 1))#求解#res = minimize(fun, x0, method='SLSQP', constraints=cons)print('最大值:',res.fun)print('最优解:',res.x)

人工智能第五周实验线性规划问题求解_第12张图片
可以看到手工求解和Python代码求解结果相差无误,只是精度问题。

总结

最优化问题解决方法很多。机器学习还需要继续

你可能感兴趣的:(笔记)