Хотите ограничить вывод на терминал при использовании библиотеки CPLEX - PullRequest
0 голосов
/ 03 октября 2019

Чего я хочу достичь

При использовании библиотеки CPLEX в C ++ я хочу стереть вывод, потому что вывод информации о решении на терминал становится препятствием при повторном использовании библиотеки.

Исходный код

Исходный исходный код достаточно длинный, чтобы его здесь не было. Таким образом, ниже приведен пример кода, который показывает только проблемы в вопросе.

#include <cstring>
#include <ilcplex/ilocplex.h>
#include <bits/stdc++.h>
ILOSTLBEGIN

int main()
{
  IloEnv env;
  IloModel model(env);
  IloNumVarArray x_var(env);
  IloNumVarArray y_var(env);
  IloCplex cplex(model);

  x_var.add(IloNumVar(env, 0, IloInfinity, "x"));
  y_var.add(IloNumVar(env, 0, IloInfinity, "y"));
  model.add(IloMaximize(env, 3*x_var[0] + 5*y_var[0]));
  model.add(IloRange(env, x_var[0] + 7*y_var[0], 140, "c_1"));
  model.add(IloRange(env, x_var[0] + 2*y_var[0], 50, "c_2"));
  model.add(IloRange(env, 3*x_var[0] + 2*y_var[0], 130, "c_3"));

  cplex.setParam(IloCplex::Param::RootAlgorithm, IloCplex::Primal);
  cplex.setOut(env.getNullStream());//Error on this line

  cplex.solve();
  cplex.end();
  env.end();

  return 0;
}

cplex.setOut (env.getNullStream ());

Эта строка должна ограничиватьвывод на терминал, но это вызывает ошибку во время компиляции.

Сообщение об ошибке

Ошибка соединения происходит следующим образом.

Undefined symbols for architecture x86_64:
  "IloAlgorithm::setOut(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      _main in ccY3umy3.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Для классов IloCplex и IloAlgorithm,см. следующий URL

https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.9.0/ilog.odms.cplex.help/refcppcplex/html/classes/IloCplex.html

https://www.ibm.com/support/knowledgecenter/SSSA5P_12.5.0/ilog.odms.ide.help/refcppopl/html/classes/IloAlgorithm.html

То, что я пробовал

source Если исходный код не имеет "cplex.setOut() "line, его можно скомпилировать и запустить без проблем.

in В классе IloAlgorithm есть различные функции, но можно использовать такие функции, как" getTime () "и" printTime () "без аргументовбез проблем.

also Я также проверяю, чтобы функции с аргументами типа "getValues ​​(const IloIntVarArray vars, IloNumArray vals)" не вызывали ошибок ссылок.

・ Однако, если я использую функциюкак "setOut (ostream &)" или "setWarning (ostream &)" wВ аргументе (ostream &), как в примере кода, я получу ошибку ссылки.

Я не могу решить проблему ошибки ссылки только для (ostream &).

Пожалуйста, помогитея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...