Я задавал этот вопрос раньше как "увеличение времени решения в oop" здесь; https://www.ibm.com/developerworks/community/forums/html/topic?id=0ef4c99b-3bcc-4105-ac98-57867d5427da, но форум в настоящее время недоступен.
Позже я понял, что квадратичные c ограничения программирования конусов второго порядка создают утечку памяти. Вот краткая версия кода (источник и заголовок можно найти по ссылке на форуме выше):
#include <header.h>
int main() {
const int n = 10;
const int ins = 30;
// Parameters are read
for (int i = 0; i < ins; i++) {
IloEnv env;
IloModel model(env);
IloNumVarArray d(env, n + 1, 0, IloInfinity, ILOFLOAT);
IloNumVarArray A(env, n + 1, -IloInfinity, IloInfinity, ILOFLOAT);
IloNumVarArray C(env, n + 1, -IloInfinity, IloInfinity, ILOFLOAT);
// Other variables are defined
model.add((d[1] * d[1]) >= (A[1] * A[1]) + (C[1] * C[1])); // SOCP constraint 1
model.add((d[2] * d[2]) >= (A[2] * A[2]) + (C[2] * C[2])); // SOCP constraint 2
// Linear constraints are added according to the parameters of the instance
// Solve method of IloCplex is called and outputs are collected
env.end();
}
}
Когда этот код выполняется, время решения увеличивается с увеличением i
и Средство использования памяти Visual Studio показывает, что при каждом l oop происходит утечка памяти. Утечка памяти исчезает, если ограничения SOCP закомментированы. Странно, если добавляется только одно из этих ограничений SOCP, 1 или 2, память не протекает. Утечка происходит, только если они оба (или более других ограничений SOCP) добавлены одновременно.
Есть ли проблема в моем способе добавления этих квадратичных c ограничений?
Спасибо.
Редактировать: Для воспроизведения файла вы можете использовать следующую ссылку: https://drive.google.com/open?id=1AAPaSUhGwdGZ15c3MEb0atRQsrAel-mJ. Включает заголовок, источник и входные данные.