用java或c#表示扩展模型代码?

时间:2012-12-11 19:57:49

标签: java c# ampl code-conversion

我用magn模型软件解决了一个问题。我需要将代码转换为java或c#以打印出结果。如何在java中表示magn模型代码。有图书馆吗?如何在java和c#中表示目标函数并最大化函数? 请帮帮我。

我的AMPL代码:

param i;    #Supply
param j;    #Demand
param k;    #Time

var x{1..i,1..j,1..k} binary;

maximize z_flow : sum{a in 1..k} (x[1,1,a]+x[1,5,a] +  x[2,1,a]+x[2,3,a] + x[3,2,a]+x[3,3,a] + x[4,1,a]+ x[4,2,a] + x[4,4,a] + x[5,2,a]+x[5,3,a]);

subject to supply1cons{a in 1..k} : (x[1,1,a] + x[1,5,a]) <= 1;
subject to supply2cons{a in 1..k} : (x[2,1,a] + x[2,3,a]) <= 1;
subject to supply3cons{a in 1..k} : (x[3,2,a] + x[3,3,a]) <= 1;
subject to supply4cons{a in 1..k} : (x[4,1,a] + x[4,2,a] + x[4,4,a]) <= 1;
subject to supply5cons{a in 1..k} : (x[5,2,a] + x[5,3,a]) <= 1;

subject to demand1cons{a in 1..k} : (x[1,1,a] + x[2,1,a] + x[4,1,a]) <= 1;
subject to demand2cons{a in 1..k} : (x[3,2,a] + x[4,2,a] + x[5,2,a]) <= 1;
subject to demand3cons{a in 1..k} : (x[2,3,a] + x[3,3,a] + x[5,3,a]) <= 1;
subject to demand4cons{a in 1..k} : (x[4,4,a]) <= 1;
subject to demand5cons{a in 1..k} : (x[1,5,a]) <=1;

subject to cap1 : sum{a in 1..k}(x[1,1,a]) = 2;
subject to cap2 : sum{a in 1..k}(x[1,5,a]) = 8;
subject to cap3 : sum{a in 1..k}(x[2,1,a]) = 3;
subject to cap4 : sum{a in 1..k}(x[2,3,a]) = 4;
subject to cap5 : sum{a in 1..k}(x[3,2,a]) = 1;
subject to cap6 : sum{a in 1..k}(x[3,3,a]) = 7;
subject to cap7 : sum{a in 1..k}(x[4,1,a]) = 5;
subject to cap8 : sum{a in 1..k}(x[4,2,a]) = 2;
subject to cap9 : sum{a in 1..k}(x[4,4,a]) = 6;
subject to cap10 : sum{a in 1..k}(x[5,2,a]) = 4;
subject to cap11 : sum{a in 1..k}(x[5,3,a]) = 3;

3 个答案:

答案 0 :(得分:4)

AMPL是建模语言,您可以通过合理的努力创建模型。

然后,AMPL环境会调用解算器(后端,如果您愿意)实际解决您的问题。解决问题的不是AMPL。

由于您的问题很幸运,您可以放弃建模语言部分。然而,你仍然需要一个解决问题的解决方案。

您的问题是二进制整数编程问题。任何可以处理整数变量的线性编程求解器都是候选者。解算器通常用C或C ++编写,因此您需要一个具有Java或C#接口的解决方案。

最后,您将使用解算器附带的API来编码/构建您的问题。


考生:

另见

答案 1 :(得分:0)

您的问题分为两部分:建模和从(C#)程序调用。正如其他人所说,AMPL是一种建模语言。如果您喜欢使用AMPL等建模语言,则需要从程序中调用它。目前,AMPL没有API,但您可以通过脚本调用AMPL。 AIMMS和MPL都有API,允许您从其他程序中调用它们,但它们将要求您使用各自的建模语言重写模型。

另一种选择是直接调用求解器API。许多解算器,包括CPLEX和Gurobi,都有.NET API,允许您直接从C#程序构建和解决模型。

(免责声明:我目前在Gurobi Optimization工作,之前曾在提供CPLEX的ILOG工作过。)

答案 2 :(得分:0)

您可以尝试

Optimization Framework

这是一个免费项目,您可以在其中进行建模,也可以将AMPL Dat和Mod文件读入模型。可以通过CPLEX,Gurobi,MOPS等解决问题。

优化框架不使用AMPL,它使用GNU Mathprog构建模型实例。 MathProg是AMPL的子集,因此80%-90%的AMPL模型将保持不变。

请记住,这是一个学术项目,所以不要指望它能够稳定或成熟用于商业用途。