##构建决策变量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 16:53:53 浏览: 27
这段代码是一个数学规划模型的求解过程,其中包括了建立决策变量、构建目标函数、添加约束条件、求解最优解等步骤。
首先,通过循环遍历`CostKey`中的元组,构建决策变量`x`,并将其转化为字典格式。
然后,通过`gb.quicksum()`函数构建目标函数`Obeject`,该目标函数为求解最小值。
接下来,添加两个约束条件,即产量等于销量和销量等于生产量,可以根据需求设置产销平衡或不平衡。
将建立好的数学模型送入模型,调用`m.optimize()`求解最优解。
如果模型求解成功,就将决策变量的最优解和目标函数的最优值输出,并将结果写入Excel和txt文件中。
总之,这段代码实现了对数学规划模型的建立和求解过程,可以帮助用户解决复杂的决策问题。
相关问题
怎么讲字典里的元祖转化为字符串
可以使用join()函数将元祖中的各个元素连接成一个字符串。示例如下:
```python
my_tuple = ('apple', 'banana', 'orange')
my_string = ''.join(my_tuple)
print(my_string)
```
输出结果为:
```
'applebananaorange'
```
如果需要在各个元素之间添加特定的分隔符,可以在join()函数中指定:
```python
my_tuple = ('apple', 'banana', 'orange')
my_string = ', '.join(my_tuple)
print(my_string)
```
输出结果为:
```
'apple, banana, orange'
```
python将元祖转化为列表
可以使用 `list()` 函数将元组转换为列表。例如:
```python
my_tuple = (1, 2, 3)
my_list = list(my_tuple)
print(my_list) # 输出 [1, 2, 3]
```
注意,元组是不可变的对象,而列表是可变的对象。转换为列表后,可以对其进行修改。