Как выбрать параметры в соответствии с условием при моделировании LP?

Я пытаюсь написать смешанную целочисленную модель в IBM CPLEX, и у меня возникла проблема. Вот проблема:

Есть несколько различных курсов, которые студент может пройти, и полезность, которую студент получает от курса, зависит как от студента, так и от курса. Сложная часть; Полезность некоторых курсов иногда отличается от суммы их индивидуальных полезностей, если они взяты вместе одним и тем же студентом. Если эта совместная утилита равна нулю, то следует рассмотреть отдельные утилиты. На данный момент я планирую написать условие, которое заставит модель принять общую полезность вместо отдельных значений этих двух курсов, если они будут приняты студентом, но мне не удалось это сделать. без нелинейности.

Спасибо за вашу помощь.

1 ответ

Прежде всего, в вашем вопросе отсутствует очень важная информация: цель.

Я предполагаю, что цель состоит в том, чтобы назначать студентов на курсы таким образом, чтобы общая полезность, которую студенты получают при прохождении курсов, была максимальной. В этом случае все утилиты, которые могут быть получены любым студентом при прохождении любого курса, известны. Из вашего вопроса я также понимаю, что совместные коммунальные услуги тоже известны. Следовательно, мы можем определить новый "параметр" под названием " потеря", чтобы потеря (k, l) означала величину "потерянной полезности", когда учащиеся изучают курсы k и l одновременно. Эти значения могут быть легко рассчитаны с использованием данных. Тогда мы могли бы решить проблему следующим образом:

  • Пусть w (i, k) будет параметром, определяющим степень полезности, которую студент i получает, пройдя курс k.

  • Пусть x(i,k) будет целочисленной двоичной переменной, определяющей, проходит ли студент i курс k или нет.

  • Пусть u (i, k) будет переменной, определяющей фактическую полезность, которую студент получает от прохождения курса.

Объективная функция:

  • максимизировать сумму (u (i, k)) для всех студентов и курсов.

условия:

  • x(i,k) * w (i, k) > = u (i, k) (для всех студентов и курсов)

    Это гарантирует, что максимальная полезность студента i из курса k не может превышать предполагаемую (заданную, максимально возможную) полезность. Это также гарантирует, что u (i, k) устанавливается в ноль, когда x(i,k) равен нулю.

  • x(i,k) w (i, k) + x (i, l) w (i, l))> = u (i, k) + u (i, l) - потери (k, l) для всех "пары курса" и все студенты

    Это гарантирует, что сумма коммунальных услуг, которую студент получает от прохождения двух курсов одновременно, не может превышать общую полезность.

Другие вопросы по тегам