如何在 python 中将 ampl 求解器的结果作为数组获取
how to get the result of ampl solvers as an array in python
我正在使用 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
;
这是我的放大建模:
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 代码中使用这个优化问题的结果。
我 运行 这个代码在 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中有两个常用的数组,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)
我正在使用 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
;
这是我的放大建模:
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 代码中使用这个优化问题的结果。
我 运行 这个代码在 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中有两个常用的数组,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)