2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Switch в MIP
Сообщение11.01.2023, 18:12 
Заслуженный участник
Аватара пользователя


03/06/08
2174
МО
Пытаясь свести одну задачу к целочисленному линейному программированию, столкнулся с такой проблемой: у меня есть целочисленная переменная, принимающая 3 значения: $b, integer, \geqslant0, \leqslant2$. А нужна булевская, $x, binary$, которая бы принимала значение $1$, когда $b=0$, и $0$ в остальных случаях. Методом тыка довольно легко нашел, что проблема решается добавлением неравенств $1\leqslant b+2x\leqslant2$.
Однако применение того же метода к случаю $y, binary$, которая бы принимала значение $1$, когда $b=1$, как-то не пошло, получалось, что это (написать такое неравенство) невозможно. Нарисовав картинку на плоскости $(b,y)$, понял, почему: я пытался "вырезать" выпуклый многоугольник, в котором целых точек было бы $3$, $(0,0)$, $(1,1)$ и $(2,0)$. Однако на отрезке с концами $(0,0)$ и $(2,0)$ лежит "лишняя" точка $(1,0)$, от которой, таким образом, нельзя избавиться.
Пришлось пойти длинным путем: ввести признак равенства двум ($z, binary$, которая принимает значение $1$, когда $b=2$), тогда проблемы лишней точки нет, $z$ задается неравенством $-1\leqslant-b+2z\leqslant0$, а уж признак равенства единице $y$ задаем через $x$ и $z$: $y=(¬x)\&(¬z)$, по MIP-вски, соответственно, $0\leqslant(1-x)+(1-z)-2y\leqslant1$.
Вопрос, собс-но, нет ли какой-то общей технологии решения такого сорта задач? скажем, для переменной с 4 значениями все еще усложняется, не хочется изобретать велосипеды.
Может быть, есть какая-то книжка (типа "Математическая логика и целочисленное программирование")?

 Профиль  
                  
 
 Re: Switch в MIP
Сообщение11.01.2023, 20:55 


15/11/15
947
А что такое MIP? Там нельзя просто написать типа:
Код:
function f1(b) {
    int x = 1; if (b!=0) x = 0;
    return x;
}
function f2(b) {
    int y = 1; if (b!=1) y = 0;
    return y;
}
И т.д...

Или вместе
Код:
function f1(b,par) {
    int x = 1; if (b!=par) x = 0;
    return x;
}

 Профиль  
                  
 
 Re: Switch в MIP
Сообщение11.01.2023, 21:00 
Заслуженный участник
Аватара пользователя


16/07/14
8426
Цюрих
gevaraweb в сообщении #1576806 писал(а):
А что такое MIP?
Mixed Integer Programming - задача оптимизации с ограничениями, в которой на часть переменных наложено ограничение целочисленности (а на часть - нет, иначе это просто Integer Programming). Как правило ограничения и целевая функция считаются линейными.

 Профиль  
                  
 
 Re: Switch в MIP
Сообщение11.01.2023, 21:36 
Заслуженный участник
Аватара пользователя


03/06/08
2174
МО
Да, все верно.
В линейном программировании, включая целочисленный вариант, можно только писать линейные уравнения и неравенства, никакие другие манипуляции не допускаются.

 Профиль  
                  
 
 Re: Switch в MIP
Сообщение18.09.2023, 23:22 
Модератор
Аватара пользователя


11/01/06
5660
Введите 3 бинарные переменные, удовлеворяющие условиям:
$$\begin{cases}
x_0 + x_1 + x_2 = 1\\
0x_0 + 1x_1 + 2x_2 = b
\end{cases}
$$
Тогда $x_i=1$ тогда и только тогда, когда $b=i$.

 Профиль  
                  
 
 Re: Switch в MIP
Сообщение19.09.2023, 14:07 
Заслуженный участник
Аватара пользователя


03/06/08
2174
МО
maxal
Да, точно. И для любого числа вариантов работает.
Очень изящно. Спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group