Как и люди в предложенных комментариях, используйте отладчик, чтобы отследить проблему. Еще лучше: скомпилируйте вашу программу в режиме отладки. Код IloCplex содержит большое количество утверждений в заголовочных файлах, которые улавливают распространенные ошибки. Запуск вашего кода в режиме отладки приводит к ошибке подтверждения:
X& IloArray::operator[] (IloInt i) : Out of bounds operation: index superior to size of array
segfault2.bin++: concert/include/ilconcert/iloenv.h:2246: X& IloArray<X>::operator[](IloInt) [with X = IloNumVarArray; IloInt = long int]: Assertion `(i < _impl->getSize()) || (std:: cerr << "X& IloArray::operator[] (IloInt i) : Out of bounds operation: index superior to size of array" << std:: endl, ilo_stop_assert())' failed.
Aborted
Это ясно показывает, что вы обращаетесь к массиву за его пределами (как уже было сказано в одном из комментариев). Возвращаясь к этому, вы можете видеть, что в вашем коде неправильная строка:
mod.add(IloMaximize(
env, 6.5 * x[0][0] + 11 * x[0][1] + 9.75 * x[1][0] + 12.25 * x[1][1] +
9.5 * x[1][2] + 4.75 * x[2][0] + 7.75 * x[2][1] +
8.5 * x[2][2] + 7.5 * x[3][0] + 8.5 * x[3][1]));
Вы получаете доступ к x[3][*]
, хотя массив x
содержит только 3 элемента. Таким образом, только индексы 0, 1, 2 действительны для этого массива. Кроме того, вы обращаетесь к x[*][2]
в некоторых местах, хотя второе измерение вашего массива - только 2.