Как сравнить переменные с плавающей точкой, используя строгое неравенство? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь реализовать задачу максимизации.В одной части я пытаюсь сравнить float с dvar float, для которого я получаю сообщение об ошибке «Оператор> (float, dvar float) недоступен в контексте CPLEX».Использование> = работает, но я получаю неправильные результаты.Есть ли способ обойти ошибку?

float price[D][A] = ...;
float volaforecast[D] = ...;
dvar float vola;
dvar int change[D][A];

maximize sum(d in D, a in A)(price[d][a] * change[d][a]);

subject to {
    forall(d in D: d > 1) {
        ( volaforecast[d] <= vola && 
          volaforecast[d-1] > vola && 
          change[d]["a"] == 0
        ) || (
          volaforecast[d] > vola && 
          volaforecast[d-1] <= vola && 
          change[d]["a"] == 1
        );
    }
}

1 Ответ

0 голосов
/ 24 апреля 2019

Как отметил Тим в своем комментарии, вы должны использовать var >= value + epsilon. Строгое неравенство не соответствует парадигме линейного программирования, которую использует CPLEX.

...