Вылеты с кусочно-линейной целью для gurobi 6.0.2/setPWLObj

У нас есть сложная проблема оптимизации, которая включает в себя несколько квадратичных членов с целыми и непрерывными переменными (с использованием Anaconda Python/Pycharm с Gurobi 6.0.2). Мы применили функцию setPWLObj для аппроксимации квадратичных целевых компонентов. Код для этого выглядит следующим образом:

    m.addConstr(l1[t] == 1/2.0 * (hsqrt[t]+hQ[t]))
    m.addConstr(l2[t] == 1/2.0 * (hsqrt[t]-hQ[t]))
    hlx1 = linspace(-10, 10, 50)  
    hlx2 = linspace(-10, 10, 50)
    h1y1 = [0]*50
    hly2 = [0]*50

    for i in range(len(hlx1)):
        h1y1[i] = hlx1[i] * hlx1[i] * 7.348 / 1000.0
        hly2[i] = -hlx2[i] * hlx2[i] * 7.348 / 1000.0

    m.setPWLObj(l1[t], hlx1, h1y1)
    m.setPWLObj(l2[t], hlx2, hly2)

При этом l1 и l2 являются непрерывными переменными.

Проблема ведет себя непоследовательно. Запуск его на Mac в основном дает коды выхода 138 и 139 (соответствует ошибке шины 10), иногда можно вычислить решение той же проблемы. Особенно это касается запуска оптимизации несколько раз подряд. Это кажется случайным.

На машинах с Windows происходит сбой Python или выдается код выхода "-1073741819". Дальнейшие поиски этого кода выхода нам особо не помогли.


person Alexander Schuller    schedule 04.03.2015    source источник
comment
Полный пример с определениями l1 и так далее был бы полезен.   -  person Sebastian Werk    schedule 06.03.2015


Ответы (1)


Извините, что так долго, но мы исправили проблему.

На самом деле мы выяснили, что сбой Python произошел или произошел из-за ошибки в Gurobi. По нашему запросу ошибка была устранена.

Если Гуроби 6.0.3. или выше, ошибки больше нет.

person Alexander Schuller    schedule 16.06.2015