我有一个在IBM ILOG CPLEX Optimization Studio中建模和编写的优化问题。我想从Java调用.mod和.dat。我找到了一些例子。但是,我遇到了一些错误。
我的代码如下所示。我还添加了所有cplex和opl库
package cplexJava;
import ilog.concert.*;
import ilog.cplex.*;
import ilog.opl.*;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
model();
}
public static void model() {
int status = 127;
IloOplFactory.setDebugMode(true);
IloOplFactory oplF = new IloOplFactory();
IloOplErrorHandler errHandler = oplF.createOplErrorHandler();
IloOplModelSource modelSource = oplF.createOplModelSource("D:/Cplex project/Example_2/Example_2.mod");
IloOplSettings settings = oplF.createOplSettings(errHandler);
IloOplModelDefinition def = oplF.createOplModelDefinition(modelSource,settings);
IloCplex cplex = oplF.createCplex();
cplex.setOut(null);
IloOplModel opl = oplF.createOplModel(def, cplex);
IloOplDataSource dataSource = oplF.createOplDataSource("D:/Cplex project/Example_2/Example_2.dat");
opl.addDataSource(dataSource);
opl.generate();
if (cplex.solve())
{
System.out.println("OBJECTIVE: " + opl.getCplex().getObjValue());
opl.postProcess();
opl.printSolution(System.out);
}
else
{
System.out.println("No solution!");
}
oplF.end();
status = 0;
System.exit(status);
}
}
在我的代码中,错误来自oplF.createCplex()
和cplex.solve()
。当我尝试运行它时,这是我得到的错误。
尽管我已经添加了oplF.createCplex()
和cplex.solve()
库,但我不知道为什么从cplex
和opl
收到错误消息
答案 0 :(得分:1)
实际上,您的IDE告诉您问题出在哪里:可能引发了IloException,而您不处理它们。您需要用try catch块将代码括起来,或者您的主方法应该在签名中包含“ throws IloException”:
package cplexJava;
import ilog.concert.*;
import ilog.cplex.*;
import ilog.opl.*;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
model();
}
public static void model() {
int status = 127;
try {
IloOplFactory.setDebugMode(true);
IloOplFactory oplF = new IloOplFactory();
IloOplErrorHandler errHandler = oplF.createOplErrorHandler();
IloOplModelSource modelSource = oplF.createOplModelSource("D:/Cplex project/Example_2/Example_2.mod");
IloOplSettings settings = oplF.createOplSettings(errHandler);
IloOplModelDefinition def = oplF.createOplModelDefinition(modelSource,settings);
IloCplex cplex = oplF.createCplex();
cplex.setOut(null);
IloOplModel opl = oplF.createOplModel(def, cplex);
IloOplDataSource dataSource = oplF.createOplDataSource("D:/Cplex project/Example_2/Example_2.dat");
opl.addDataSource(dataSource);
opl.generate();
if (cplex.solve())
{
System.out.println("OBJECTIVE: " + opl.getCplex().getObjValue());
opl.postProcess();
opl.printSolution(System.out);
}
else
{
System.out.println("No solution!");
}
oplF.end();
} catch (IloException ilx) {
// log error message or something like that
}
status = 0;
System.exit(status);
}
}
并且请使用带有大写首字母的类名和所有小写字母的包名。
答案 1 :(得分:0)
对于OPL Java API,您只需要oplall.jar。
设置
在装有Eclipse 3.6的x86-64 Linux计算机上,这是完成的,就像这样(希望对您来说很相似):
COS_INSTALL_DIR/opl/lib/oplall.jar
(其中COS_INSTALL_DIR
是CPLEX Optimization Studio的安装位置)要做的另一件事是确保将您的LD_LIBRARY_PATH
环境变量设置为COS_INSTALL_DIR/opl/bin/x86-64_linux
。 (注意:在Windows上,我认为应该改为设置PATH
环境变量。)您可以在Eclipse中进行设置,如下所示:
LD_LIBRARY_PATH
(在Windows上尝试PATH
)COS_INSTALL_DIR/opl/bin/x86-64_linux
(同样,COS_INSTALL_DIR
是CPLEX Optimization Studio的安装位置)修复编译器错误
设置好之后,您可能会注意到您仍然遇到编译器错误(红色的小竖线表示此错误)。将鼠标悬停在上面的那些上,您将看到快速修复的列表:1)添加throws声明; 2)环绕尝试/捕捉。选择其中一个来解决问题。在所有红色波浪线都消失之后,您应该可以运行您的程序。
答案 2 :(得分:0)
答案 3 :(得分:0)