我已经在OPL中编码并运行了我的模型,并且我试图在JAVA中运行它并再次运行它。作为我的代码的一部分(在OPL中),我定义了一个元组,如下所示:
int Y = asSet(1..7);
int k = asSet(1..42);
int G = asSet(1..2);
tuple SL {
int i;
int j;
float l;
}
{SL} SLs with i,j in Y=...; /* e.g. {<1,2,502>, <2,5,309>, <5,7,401>, <2,3,350>} */
Then, I have defined other arrays of:
int u[SLs][G]=...; /* e.g. u[<1,2,502>][1] = 50; u[<1,2,502>][2] = 83; u[<2,5,309>][1] = 75;*/
现在,我想用Java编写代码,我已经按照以下步骤进行了操作,但是我不确定是否正确。如果您能分享您的想法,我将不胜感激。
import java.io.*;
import java.util.*;
public class Model {
public static int Y = 7;
public static int K = 42;
public static int G = 3;
public static int R = 2;
public class SL {
public int i; /* how say i is in Y*/
public int j; /* how say j is in Y*/
public int l;
List<SL> sl = new ArrayList<SL>();
Object[] SL1 = Sl.toArray();
int [][] u = new int [sL.length][G];
}
public static void Solve() {
/* How to instantiate SL1 and u[<i,j,l> in SL1][g in G] here and printout SL1:*/
}
}
和另一个用于运行Solve()方法的类:
public class SolverMethod {
public static void main(String[] args) {
Model.Solve();
}
}
如果您能帮助我修复和运行代码,我将不胜感激。
关于, 博尔尼
答案 0 :(得分:1)
您可以制作Map,以便使用SL的元组或对象可以生成唯一的数字,该数字可以用作u var中的索引。说,
Map<SL,Integer> m;
int key=m.get(sl);
u[key][g]
并且要使SL1无效,您需要使SL成为对象,因为SL1不是静态的。
SL sl=new SL();
sl.SL1 or sl.u
首先创建SL的对象,然后指向它的变量或方法。
这是我下面的实现代码。我做了一些更改。
import java.io.*;
import java.util.*;
public class Model {
public static int Y = 7;
public static int K = 42;
public static int G = 3;
public static int R = 2;
static Map<SL,Integer> m=new HashMap<>();
static List<SL> sL = new ArrayList<SL>();
static int[][] u;
static int index=0;
static public class SL {
public int i;
/* how say i is in Y*/
public int j;
/* how say j is in Y*/
public int l;
}
public static void Solve() {
/* How to instantiate SL1 and u[<i,j,l> in SL1][g in G] here and printout SL1:*/
for(int i=0;i<5;i++){
SL sl=new SL();
sl.i=i;sl.j=i+1;sl.l=i+2;
sL.add(sl);
m.put(sl, index++);
}
u=new int[m.size()][G];
for(SL s:sL){
for(int i=0;i<G;i++){
u[m.get(s)][i]=i+10;
}
}
for(SL s:sL){
for(int i=0;i<G;i++){
System.out.println(u[m.get(s)][i]);
}
}
}
public static void main(String[] arg){
Model.Solve();
}
}
在这里,我已经将sL,m和u设置为静态,因为我们只需要一个实例。