Решающий момент в оптимизации PuLP

История

Я пытаюсь написать задачу об исключении бейсбола, используя минимизацию PuLP (python). Основная проблема выглядит так:

введите здесь описание изображения

В основном x_ij - это будущие победы команды i над командой j, g_ij - это общее количество игр, оставшихся между командами i и j, k - это команда, которая нам интересна, p_j - это очки, которые команда имеет на данный момент. Переменная z_j просто вспомогательная, она 1, когда команда j опережает k (по общему количеству побед) и 0, если отстает.

Проблема

У меня нет проблем написать это в терминах PuLP и решить проблему оптимизации. Тем не менее, я хотел добавить некоторые правила разрешения конфликтов, чтобы настроить ограничения, чтобы, например, t_j == t_k, он сравнивал, скажем, x_jk с x_kj, чтобы решить, опережает ли команда j k.

Вопрос

Так что в основном мне нужно условие, которое срабатывает только при определенных обстоятельствах. Есть ли способ сделать это легко в PuLP? Может быть, введя какую-нибудь другую переменную? Если нет, то какой модуль / метод вы бы предложили для решения такого рода проблем?


person hayk    schedule 25.08.2017    source источник
comment
Принимают ли переменные t целые числа? Если да, то вы можете добавить дробный компонент, полученный из правил тай-брейка. Тогда дробная составляющая будет иметь значение только в том случае, если в противном случае t переменных будут связаны   -  person thomaskeefe    schedule 25.08.2017
comment
Я подумал об этом, но проблема в том, что существует целый набор правил, разрешающих ничьи, так что это быстро обострится и убьет наш числовой алгоритм. Вот почему я спросил, есть ли более строгий способ.   -  person hayk    schedule 25.08.2017
comment
Когда вы говорите «числовой алгоритм», вы имеете в виду решатель целлюлозы? Я был бы удивлен, если бы мое предложение сильно повлияло на скорость.   -  person thomaskeefe    schedule 25.08.2017
comment
Что ж, правила разрыва связи действительно разные (их примерно 16), поэтому вы не можете просто жестко закодировать их все в разные дробные порядки.   -  person hayk    schedule 25.08.2017


Ответы (1)


Поскольку у вас есть много правил разрешения ничей, которые конкурируют друг с другом, вам может потребоваться более сложная целевая функция, которая вознаграждает или наказывает определенные команды в соответствии с правилами тай-брейка. Вам нужно будет как-то «оценить» условия с помощью целевой функции. Фиктивные переменные и ограничения Big M могут быть полезны для условий "если / то".

person thomaskeefe    schedule 25.08.2017