Я использую Cplex на Java, и у меня есть проблема с настройкой ограничения.cplex java ограничение устанавливается с помощью операторов присваивания «+ =»
У меня есть матрица x [n] [n], где x может быть 0 или 1. Для каждого i (1..n) сумма всех j (1..n) = 1
Что касается ответа на этот пост: Cplex c++ multidimensional decision variable, я настроил свой код так:
for (int i=0; i<n; i++){
IloNumExpr sum_over_i;
for(int j=0; j<n; j++){
sum_over_i += x[i][j];
}
cplex.addEq(sum_over_i, 1.0);
}
за 4-й строке кода Java показывает эту ошибку: «оператор + = не определено для типа аргумента (ы) IloNumExpr, IloNumVar "
Возможно ли, что присвоение op такие как «+ =» работают для cplex C++, но не для cplex java?
В качестве альтернативы, я попытался это:
for(int i=0; i<n; i++){
IloNumExpr sum_over_i = null;
for(int j=0; j<n; j++){
cplex.eq(sum_over_i, cplex.sum(sum_over_i, x[i][j]));
}
cplex.addEq(sum_over_i, 1.0);
}
В этом случае Eclipse, приходит с этой запиской об ошибке при запуске:
Exception in thread "main" java.lang.NullPointerException
at ilog.cplex.CpxQextractor.visitLinkedExpr(CpxQextractor.java:73)
at ilog.cplex.CpxLinkedExpr.accept(CpxLinkedExpr.java:46)
at ilog.cplex.CpxRange.<init>(CpxRange.java:1337)
at ilog.cplex.IloCplexModeler.makeRange(IloCplexModeler.java:4316)
at ilog.cplex.IloCplexModeler.eq(IloCplexModeler.java:4902)
at TSP.main(TSP.java:57)
Может кто-нибудь сказать мне, что не так о моем коде ?
Заранее спасибо.
Перегрузка оператора не поддерживается в java, вы не можете просто взять код C++ и ожидать, что он будет работать в java. Вероятно, вы должны прочитать учебник java вместо того, чтобы споткнуться в темноте, что также устранит путаницу в отношении исключения нулевого указателя. – Voo
Имейте в виду, что 'null' - это не то же самое, что' 0', как это может быть на некоторых языках , 'null' - это совсем другое. –
Спасибо за ваши ответы. Операции типа «+ =» работают в java, поэтому я ожидал, что это будет полезно для java/cpley при просмотре кода на C++. – Hendrik