如何在python中以数组形式获取ampl求解结果

问题描述 投票:0回答:1

我正在使用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 optimization ampl
1个回答
0
投票

在python中,有2个常用的东西,就是像数组一样。liststuples. 主要的区别是元组不能被修改,但列表可以。例如,你可以在一个列表的末尾添加内容。但你不能从元组中添加或删除项目。

列表中的 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)

© www.soinside.com 2019 - 2024. All rights reserved.