【问题标题】:Represent ampl model code in java or c#?在java或c#中表示ampl模型代码?
【发布时间】:2012-12-11 19:57:49
【问题描述】:

我用放大器模型软件解决了一个问题。我需要将代码转换为 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;

【问题讨论】:

  • 除非你的模型非常简单,否则你做不到,这是一项非常重要的任务。
  • 阿里..这是一个简单的模型..我需要找到最小的时隙来发送一个网络中的所有数据包有一些限制
  • 那么就有希望了。你能发布你的 AMPL 模型吗?
  • 您有任何许可限制吗?对第三方的限制?
  • @ali.. 没有...在免费之前对第三方没有限制..请在帖子中找到我的放大器代码..我重新编辑了。

标签: java c# ampl code-conversion


【解决方案1】:

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

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

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

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

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


候选人:

另见

【讨论】:

  • 我还要添加or-tools。它对 GLPK、CBC 和其他求解器有一个很好的 .net 包装器(CBC 是最好的免费求解器之一,恕我直言)。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    你可以试试

    Optimization Framework

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多