Пример. В этой задаче n=2, b=3, поэтому таблица с результатами вычислений будет иметь вид:
Решить задачу: u1+2u2-> max 2u1+u2 £ 3 u1, u2 - целые. В этой задаче n =2, b =3, поэтому таблица с результатами вычислений будет иметь вид:
Запишем соотношение Беллмана: Wi(x)= max (Ci+1u+Wi+1(x+Ai+1u)), uÎ Ui+1(x), ui+1(x) = {0, 1,..., [(b-x)/Ai+1]}, u i+1(x)= argmax{ Ci+1u+Wi+1(x+Ai+1u)| uÎ U i(x)}.
Первый этап: W2(x)=0, xÎ {0, 1, 2, 3} - (смотри последний столбец предыдущей таблицы) W1(x)= max[ 2u+W2(x+u)], xÎ {0, 1, 2, 3}, uÎ U2(x), U2(0)={0, 1, 2, 3}, W1(0)=max[0, 2, 4, 6]=6, u2(0)=3, U2(1)={0, 1, 2}, W1(1)= max[0, 2, 4]=4, u 2(1)=2, U2(2)= {0, 1}, W1(2)= max[0, 2]=2, u 2(2)=1, U2(3)={0}, W1(3)=max[0]=0, u 2(3)=0, W0(x)= max[ u+W1(x+2u)], uÎ U1(xi), U1(0)={0, 1} W0(0)= max[u+ W1(0+2u)]=max[6, 5]=6, uÎ {0, 1}, u 1(0)=0. Второй этап: x0? =0, u1? =u1(x0?)=u1(0)=0, x1? =x0? +A1u1? =0; u2=u2(x1)=u2(0)=3, x2=x1+A2u2=3. Итак, значение функционала составит W0 (0)=6, при этом u1=0, u2=3; x0=0, x1=0, x2=3.
Задание 10 Решить задачу о ранце при n=5, b=8, значения c(i), a(i), iÎ [1..n], взять из следующей таблицы в соответствии с номером варианта.
Результаты представить в виде таблицы
Выписать оптимальное значение функционала и значения переменных, на которых он достигается. Метод ветвей и границ для решения задачи о коммивояжере.
Пусть имеется (n+1) городов A(0), A(1), A(2), A(3),..., A(n). Между всеми парами городов известно расстояние c(i, j) ³ 0. Коммивояжер, который находится в городе A(0), должен обойти все города, побывав в каждом ровно один раз и вернуться в город A(0) так, чтобы длина пройденного пути была наименьшей. Путь коммивояжера (i(0), i(1), i(2),..., i(n), i(0)) образует замкнутый маршрут. Его длина l(i(0), i(1), i(2),..., i(n), i(0))=c(i(0), i(1))+c(i(1), i(2)) + c(i(2), i(3)) +...+c(i(n), i(0)). Не трудно видеть, что число таких маршрутов равно n!. Для поиска минимального (оптимального) маршрута применим метод ветвей и границ. Общая схема этого метода приведена в лабораторной работе " Метод ветвей и границ (алгоритм Ленд и Дойга) для решения задач целочисленного линейного программирования". Дадим описание этого метода для задачи о коммивояжере. Алгоритм. Шаг 1. Задание множества X(0, 1) и вычисление оценки x(0, 1). Множество X(0, 1) есть множество всех возможных маршрутов коммивояжера. Оценку x(0, 1 ) получаем, используя процедуру приведения матрицы C= (c(i, j)), iÎ [0..n], j Î [0..n], следующим образом. Для всех iÎ [0..n], h(i): = min{c(i, j) | jÎ [0..n]}, c'(i, j): = c(i, j) - h(i), i Î [0..n], j Î [0..n]. Для всех jÎ [0..n], H(j): = min{c'(i, j) | iÎ [0..n]}, c" (i, j): = c'(i, j) - H(i), i Î [0..n], j Î [0..n]. Переменные h(i), H(j) называют коэффициентами приведения. Матрицу C" = (c" (i, j)), iÎ [0..n], jÎ [0..n], называют приведенной матрицей. Полагаем x(0, 1)=S {h(i) | iÎ [0..n] } +S {H(j) | jÎ [0..n] }.
|