1

我用放大器模型软件解决了一个问题。我需要将代码转换为 java 或 c# 以打印出结果。如何在 java 中表示 ampl 模型代码。有图书馆吗?如何在 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;
4

3 回答 3

4

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

然后,AMPL 环境调用一个求解器(如果您愿意,可以使用后端)来实际解决您的问题。不是 AMPL 可以解决您的问题。

由于您的问题很简单,您可以放弃建模语言部分。尽管如此,您仍然需要一个为您解决问题的求解器。

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

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


候选人:

也可以看看

于 2012-12-12T10:09:21.303 回答
0

你可以试试

优化框架

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

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

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

于 2013-01-08T14:27:57.177 回答
0

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

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

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

于 2012-12-24T22:51:44.740 回答