Задача целочисленного программирования
Задача целочисленного программирования — это задача линейного программирования, в которой решение ищется в целых числах. Ниже представлена основная задача целочисленного программирования.
Математическая модель[править]
Математическая модель задачи целочисленного программирования имеет следующий вид:
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle L^{\text{ц}}(X) = \sum\limits_{j=1}^n c_jx_j \rightarrow \max}
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \begin{cases}\sum\limits_{j=1}^n a_{ij}x_j \le b_i, \ \forall i\in N_m \\ x_j \in \mathbb{N} \cup 0, \forall j\in N_n\end{cases}}
или
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle L^{\text{ц}}(X) = c_1x_1 + c_2x_2 + \ldots + c_nx_n \rightarrow \max}
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \begin{cases}a_{11}x_1+a_{12}x_2+\ldots+a_{1n}x_n \le b_1 \\ a_{21}x_1+a_{22}x_2+\ldots+a_{2n}x_n \le b_2 \\ \ldots \\ a_{m1}x_1+a_{m2}x_2+\ldots+a_{mn}x_n \le b_m \\ x_1 \ge 0, \ x_2 \ge 0, \ldots, \ x_n \ge 0 \\ x_1 \in \mathbb{Z}, \ x_2 \in \mathbb{Z}, \ldots, \ x_n \in \mathbb{Z} \end{cases}}
Метод решения[править]
Задача целочисленного программирования решается методом Гомори. Суть метода состоит в первоначальном решении симплекс-методом вспомогательной задачи линейного программирования (без ограничения целочисленности) вида:
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle L(X) = \sum\limits_{j=1}^n c_jx_j \rightarrow \max}
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \begin{cases}\sum\limits_{j=1}^n a_{ij}x_j \le b_i, \ \forall i\in N_m \\ x_j \ge 0, \forall j\in N_n\end{cases}}
или
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle L(X) = c_1x_1 + c_2x_2 + \ldots + c_nx_n \rightarrow \max}
- Невозможно разобрать выражение (SVG с запасным PNG (MathML можно включить с помощью плагина для браузера): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \begin{cases}a_{11}x_1+a_{12}x_2+\ldots+a_{1n}x_n \le b_1 \\ a_{21}x_1+a_{22}x_2+\ldots+a_{2n}x_n \le b_2 \\ \ldots \\ a_{m1}x_1+a_{m2}x_2+\ldots+a_{mn}x_n \le b_m \\ x_1 \ge 0, \ x_2 \ge 0, \ldots, \ x_n \ge 0 \end{cases}}
Затем для нецелочисленной переменной оптимального решения вспомогательной задачи составляется ограничение отсечения и вновь решается вспомогательная задача, но уже М-методом. Причём если в r-ой строке последней симплекс-таблицы базисная переменная не является целочисленной (а она должна быть целочисленной по условию задачи), то составляется ограничение отсечения вида:
{arj}=arj-[arj] - дробная часть числа.
Повторяя процедуру добавления ограничения отсечения и решения вспомогательной задачи, в конце получаем оптимальное целочисленное решение.
Пример решения[править]
Задача целочисленного программирования имеет вид:
Строим вспомогательную задачу линейного программирования (без ограничения целочисленности):
Вспомогательную задачу приводим к каноническому виду:
Решаем первую вспомогательную задачу симплекс-методом:
Составляем первое ограничение отсечения (в ограничении используются десятичные дроби):
Решаем вторую вспомогательную задачу М-методом:
Составляем второе ограничение отсечения (в ограничении используются правильные дроби):
Решаем третью вспомогательную задачу М-методом:
Оптимальное решение последней вспомогательной задачи x1=5, x2=2, x3=0, x4=7, x5=4, x6=1, x7=0, x8=0, L=38.
Оптимальное решение задачи целочисленного программирования x1=5, x2=2, Lц =38.
Другие задачи:[править]
Литература[править]
- Корбут А. А., Финкельштейн Ю. Ю. Дискретное программирование, «Наука», М., 1969.