java - 如何从 Java 调用 cplex .mod 和 .data
问题描述
我有一个在 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()
and cplex.solve()
。当我尝试运行它时,这是我得到的错误。
我无法弄清楚为什么我会从中得到错误 oplF.createCplex()
, cplex.solve()
尽管我已经添加了cplex
andopl
库
解决方案
实际上,您的 IDE 会告诉您问题所在:可能会抛出 IloExceptions 而您没有处理它们。您需要用 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);
}
}
并且请使用首字母大写的类名和全部小写的包名。
推荐阅读
- ios - 在 swiftUI 中调整 VStack 的帧大小
- c# - 使用 Azure AD 从守护进程访问网站 API
- flutter - 我从方法中得到 null 返回值。扑
- php - Laravel - 在刀片上显示复选框为真的所有字段
- c - 使用 fork() 生成多个进程并将共享内存密钥作为 cmd arg 传递
- php - 使用查询 + have_posts() 循环浏览 Wordpress 帖子仅返回其中的一小部分
- wpf - WPF 根据 ComboBox 选择更改 ListView 内容
- javascript - 使用Django,Ajax,jQuery提交表单而不刷新页面?
- r - R中是否有任何类似字典的结构
- haskell - 如何在 Haskell 中制作列表地图?