Выполнить деление на переменную с помощью CPLEX - PullRequest
0 голосов
/ 15 апреля 2019

Насколько я знаю, CPLEX позволяет использовать следующие методы:

addition method : sum()
multiplication method : prod()
subtraction method : diff()

Мне интересно, возможно ли выполнить деление по переменной, а если нет, каковы возможные обходные пути.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Если у вас есть выражение вроде

  constant1 = constant2 / var2

тогда вы можете изменить его (как в школе) на

  var2 * constant1 = constant2

Аналогично, если у вас есть что-то вроде:

  var1 / var2 = constant

, который также можно легко переставить на

  var1 = var2 * constant

Для более сложных случаев попробуйте поискать «линейное дробное программирование»

1 голос
/ 16 апреля 2019

Можно ли управлять только с помощью prod?Если нет, вы можете использовать сумму всех опций с логическими ограничениями.

Позвольте мне поделиться примером в OPL, чтобы показать вам путь:

    dvar int x in 1..4;;
    dvar int y in 1..5;;

    dvar float z; //=x/y;
    maximize z;
    subject to
    {
      z==x*sum(i in 1..5) (i==y)*(1/i);
    }

    assert z==x/y;
...