我正在使用ampl在python中对我的优化问题进行建模,我是ampl的初学者。我的变量是一个二维数组。这是我的数据。
data;
set USER := u1 u2 ;
set JOB := j1 j2 ;
param p:=
u1 j1 0.8022422666444835
u1 j2 0.8022422666444835
u2 j1 0.8022422666444835
u2 j2 0.8022422666444835
;
param o:=
u1 j1 0.268
u1 j2 0.544
u2 j1 0.234
u2 j2 0.964
;
这是我的ampl模型
set USER;
set JOB;
param p {USER,JOB}>=0;
param o {USER,JOB}>=0;
var t {i in USER, k in JOB}>=0;
maximize profit: sum{k in JOB} 50*log(1+(sum{i in USER} log(1+t[i,k]*o[i,k])))-sum{i in USER}sum{k in JOB} t[i,k]*p[i,k];
结果将是 t
变量。我想把 t
因为我想在我的python代码中使用这个优化问题的结果,我在python中运行了这个代码。
time = ampl.getVariable('t')
for i in time:
print(i)
结果是:
(('u1', 'j1'), <amplpy.variable.Variable object at 0x7f82b3b419d0>)
(('u1', 'j2'), <amplpy.variable.Variable object at 0x7f82b3b41d10>)
(('u2', 'j1'), <amplpy.variable.Variable object at 0x7f82b3b41b50>)
(('u2', 'j2'), <amplpy.variable.Variable object at 0x7f82b3b41b10>)
我不知道如何在python中把这个结果转换成一个二维数组。你能帮帮我吗?先谢谢你的帮助。
在python中,有2个常用的东西,就是像数组一样。lists
和 tuples
. 主要的区别是元组不能被修改,但列表可以。例如,你可以在一个列表的末尾添加内容。但你不能从元组中添加或删除项目。
列表中的 time
在你的python代码中,你的变量是一些可以迭代的东西,并且至少在你向我们展示的输出中产生了两个元组。两个元组中的第一个元组有两个项目。
假设同样的模式成立,并且你想要在每次迭代中得到一个三个项目的列表,在这个时间变量上,这应该是可行的。
time = ampl.getVariable('t')
list_of_lists = []
for param, ampl_var in time:
u_value, j_value = param
list_of_lists.append([u_value, j_value, ampl_var])
for sub_list in list_of_lists:
print(sub_list)