当前位置: 首页 > 科技观察

使用Python的线性规划示例

时间:2023-03-15 20:29:41 科技观察

运筹学运筹学是一种科学的决策方法,通常在需要分配稀缺资源的条件下寻求系统的良好设计。科学的决策方法需要使用一种或多种数学模型(优化模型)来做出最优决策。优化模型试图在满足给定约束的决策变量的所有值的集合中找到优化(最大化或最小化)目标函数的决策变量的值。它的三个主要组成部分是:目标函数:要优化的函数(最大化或最小化)。决策变量:影响系统性能的可控变量。约束:决策变量的一组约束(即线性不等式或等式)。非负性约束限制决策变量取正值。优化模型的解称为最佳可行解。建模步骤准确建模运筹学问题是一项重要而艰巨的任务。错误的模型会导致无法解决原始问题的错误解决方案。团队成员应遵循以下建模步骤:问题定义:定义项目范围并确定三个要素:决策变量、目标和约束条件(即约束条件)。模型构建:将问题定义转化为数学关系。模型求解:使用标准优化算法。获得解决方案后,需要进行灵敏度分析以找出由于某些参数的变化导致的解决方案的行为。模型有效性:检查模型是否按预期工作。实现:将模型和结果转化为解决方案。线性规划线性规划(也称为LP)是一种运筹学技术,当所有目标和约束都是线性的(在变量中)并且所有决策变量都是连续的时使用。线性规划是最简单的运筹学方法。Python的SciPy库包含用于解决线性规划问题的linprog函数。使用linprog时,编写代码有两个注意事项:问题必须表述为最小化问题。不等式必须表示为≤。最小化问题让我们考虑下面要解决的最小化问题:让我们看一下Python代码:#Importrequiredlibrariesimportnumpyasnpfromscipy.optimizeimportlinprog#Settheinequalityconstraintsmatrix#Note:theinequalityconstraintsmustbeintheformof<=A=np.array([[-1,-1,-1],[-1,2,0],[0,0,-1],[-1,0,0],[0,-1,0],[0,0,-1]])#Settheinequalityconstraintsvectorb=np.array([-1000,0,-340,0,0,0])#Setthecoefficientofthelinearobjectivefunctionvectorc=np.array([10,15,25])#Solvelinearprogrammingproblemres=linprog(c,A_ub=A,b_ub=b)输出结果:#Optimalvalue:15100.0#xvalues:[6.59999996e+021.00009440e-073.40000000e+02]#Numberofiterationsperformed:7#Status:Optimizationterminatedsuccessfully.由于Python的SciPy库中的linprog函数是用来解决极小化问题的,所以需要对原目标函数进行改造。通过将目标函数的系数乘以-1(即改变其符号),可以将最小化问题转化为最大化问题。让我们考虑下面需要解决的最大化问题:让我们看一下Python实现:#Importrequiredlibrariesimportnumpyasnpfromscipy.optimizeimportlinprog#Settheinequalityconstraintsmatrix#Note:theinequalityconstraintsmustbeintheformof<=A=np.array([[1,0],[2,3],[1,1],[-1,0],[0,-1]])#Settheinequalityconstraintsvectorb=np.array([16,19,8,0,0])#Setthecoefficientofthelinearobjectivefunctionvector#注意:最大化时,改变thesignsofthecvectorcoefficientc=np。array([-5,-7])#Solvelinearprogrammingproblemres=linprog(c,A_ub=A,b_ub=b)#Printresultsprint('Optimalvalue:',round(res.fun*-1,ndigits=2),'\nxvalues:',res.x,'\nNumberofiterationsperformed:',res.nit,'\nStatus:',res.message)上面代码的输出是:#Optimalvalue:46.0#xvalues:[5.3.]#Numberofiterationsperformed:5#Status:优化成功终止。最后,线性规划为更好的决策提供了一种很好的优化技术。Python的SciPy库中的linprog函数允许仅用几行代码就可以解决线性规划问题。虽然有其他免费的优化软件(如GAMS、AMPL、TORA、LINDO),使用linprog函数可以节省很多时间。