我正在使用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
变量。我想在Python语言中将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中将此结果转换为二维数组。您能帮我一下吗?提前感谢您的帮助。
发布于 2020-05-20 00:49:13
在python中有两个常用的东西,它们是类似数组的,lists
和tuples
。主要区别在于元组不能更改,但列表可以更改。例如,您可以追加到列表的末尾。但是您不能在元组中添加或删除项。
python代码中的time
变量的值是可以迭代的,它会产生一个由两个元组组成的元组,至少对于您向我们展示的输出是这样的。两个元组中的第一个有两个项目。
假设相同的模式成立,并且您希望在此时间变量上的每次迭代中包含三个项目的列表,这应该是可行的:
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)
https://stackoverflow.com/questions/61895983
复制相似问题