我用 ampl 模型软件解决了一个问题。我需要将代码转换为 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 是一种建模语言,您可以通过合理的努力创建模型。
然后,AMPL 环境调用一个求解器(如果您愿意,可以作为后端)真正解决您的问题。 AMPL 不能解决您的问题。
幸好你的问题很简单,建模语言部分可以放弃。尽管如此,您仍然需要一个可以为您解决问题的求解器。
你的问题是二进制整数规划问题。任何可以处理整数变量的线性规划求解器都是候选者。求解器通常用 C 或 C++ 编写,因此您需要一个具有 Java 或 C# 接口(interface)的求解器。
最后,您将使用求解器附带的 API 编写/构建您的问题。
候选人:
另见
关于java - 用 java 或 c# 表示 ampl 模型代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827531/