##构建决策变量x,并将x从元祖转化为字典 x={} for i, j in CostKey: x[i, j] = m.addVar(0,gb.GRB.INFINITY,vtype=gb.GRB.INTEGER, name="x"+str(OnlyNumber(i))+str(OnlyNumber(j))) x= gb.tupledict(x) #构建目标函数,默认求最小值 Obeject = gb.quicksum(x[i, j] * Cost[i, j] for i, j in CostKey) m.setObjective(Obeject) m.addConstrs((x.sum("*", j) == Sale[j] for j in SaleKey), name="Con1") # 添加约束条件1 m.addConstrs((x.sum(i, "*") == Production[i]for i in ProductionKey), name="Con2") #m.addConstrs((x.sum(i, "*") <= Production[i]for i in ProductionKey), name="Con2") # 添加约束条件2(可设置产销平衡或产销不平衡) m.write("Transport.lp") #将建立好的数学模型(决策变量、目标函数等)送入模型 m.optimize() # 求解 if m.status == gb.GRB.OPTIMAL: for v in m.getVars(): print("%s %g" % (v.varName, v.x)) print("Object: %g" % m.objVal) else: print(f"变量{m.varName} 没有最优解") #决策变量X最优解展示 wb1=openpyxl.Workbook() ws1=wb1['Sheet'] ws1.cell(1,1).value="变量名" ws1.cell(1,2).value="数值" ws1.cell(1,4).value="目标函数最优值" ws1.cell(2,4).value=m.objVal ResultX=[] NameX=[] for value in m.getVars(): if value.x>0: ResultX.append(value.x) NameX.append(value.varName) for i in range(2,len(NameX)+2): ws1.cell(i,1).value=NameX[i-2] ws1.cell(i,2).value=ResultX[i-2] wb1.save("result.xlsx") #将结果写入excel表中 with open("C:\\Users\\LENOVO\\Desktop\\gurobi\\result.txt",'w') as FileResult: FileResult.write("变量名 数值"+'\n') for i in range(len(NameX)): FileResult.write(str(NameX[i])+" "+str(ResultX[i])+'\n') FileResult.write('\n') FileResult.write("目标函数值: "+str(m.objVal)) #将结果写入txt文件中
时间: 2024-02-29 15:53:53 浏览: 177
Python语言学习之列表、元祖、字典:python和列表、元祖、字典的使用方法之详细攻略(十多个案例代码讲解)
5星 · 资源好评率100%
这段代码是一个数学规划模型的求解过程,其中包括了建立决策变量、构建目标函数、添加约束条件、求解最优解等步骤。
首先,通过循环遍历`CostKey`中的元组,构建决策变量`x`,并将其转化为字典格式。
然后,通过`gb.quicksum()`函数构建目标函数`Obeject`,该目标函数为求解最小值。
接下来,添加两个约束条件,即产量等于销量和销量等于生产量,可以根据需求设置产销平衡或不平衡。
将建立好的数学模型送入模型,调用`m.optimize()`求解最优解。
如果模型求解成功,就将决策变量的最优解和目标函数的最优值输出,并将结果写入Excel和txt文件中。
总之,这段代码实现了对数学规划模型的建立和求解过程,可以帮助用户解决复杂的决策问题。
阅读全文