首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中以数组形式获取ampl求解器的结果

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

Stack Overflow用户
提问于 2020-05-20 00:24:09
回答 1查看 128关注 0票数 0

我正在使用ampl在python中对我的优化问题进行建模,我是ampl的初学者。我的变量是一个二维数组。这是我的数据:

代码语言:javascript
运行
复制
 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模型:

代码语言:javascript
运行
复制
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中运行了以下代码:

代码语言:javascript
运行
复制
time = ampl.getVariable('t')
for i in time:
    print(i)

结果是:

代码语言:javascript
运行
复制
(('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中将此结果转换为二维数组。您能帮我一下吗?提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 00:49:13

在python中有两个常用的东西,它们是类似数组的,liststuples。主要区别在于元组不能更改,但列表可以更改。例如,您可以追加到列表的末尾。但是您不能在元组中添加或删除项。

python代码中的time变量的值是可以迭代的,它会产生一个由两个元组组成的元组,至少对于您向我们展示的输出是这样的。两个元组中的第一个有两个项目。

假设相同的模式成立,并且您希望在此时间变量上的每次迭代中包含三个项目的列表,这应该是可行的:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61895983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档