logo search
Методические указания по курсовому проектирован

3.2.2. Эвристические методы принятия решений

Приведем описание эвристического метода решения задачи в качестве примера.

Термин эвристический носит двоякий смысл. Во-первых, к эвристическим методам относят методы, являющимися человеко-машинными, т.е. методы, которые не во всех своих деталях могут быть записаны формально и требуют непосредственного принятия решения человеком на некоторых стадиях вычислительного процесса. Во-вторых, эвристические методы характеризуются использованием некоторых правдоподобных соображений, не являющихся формально обоснованными.

На практике чаще всего используют эвристические методы решения задачи, так как точные методы невозможно применить из-за «проклятия размерности».

Одним из приемов, которые часто используются на практике, является "пожирающие" (greedy) алгоритмы (для булевых задач  метод последовательного назначения единиц).

Рассмотрим применение пожирающего алгоритма на примере задачи линейного программирования с одним линейным ограничением. Пусть необходимо найти максимум:

, (1)

при условии:

, (2)

где x {0, 1}, j = 1, 2, …, n, cj > 0, aj > 0, bj > 0. Не умаляя общности, можно предположить, что переменные занумерованы так, что c1/a1 c2/a2 ≥ ≥ cn/an. Будем пытаться максимизировать f(x) за счет самых больших значений cj/aj, полагая последовательно x1, x2, и т. д. равными единице до тех пор, пока не нарушится ограничение (2).

Рассмотрим алгоритм решения задачи о выборе рациона питания:

С=c1x1+c2x2+c3x3+c4x4 min;

xi ≥ 0, i = 1,2,3,4;

а11х121х231х341х4b1;

а12х122х232х342х4b2:

а13х123х333х343х4b3.

Воспользуемся пожирающим алгоритмом (можно также найти точное решение задачи, используя симплекс метод):

1. Найдем список коэффициентов:

H={ h11, h12, h13, h21, h22 ,h23, …, h41, h42, h43,} ,

где h11=c1/a11, h12=c1/a12, h13=c1/a13,.

h21=c2/a21, h22=c2/a22, h23= c2/a23 …,

h41= c4/a41, h42=c2/a42, , h43= c4/a43,

H={cj/aji i=1,4; j=1,3}.

2. Присвоим s (номер витка цикла) значение равное единице

3. Найдем минимальное значение h*ij, h*ij H и исключим из списка H все значения hkj (k=1,4).

4. Назначим максимально возможное значение x*i (s):

x*(s)i = bj/aij.

  1. Удалим из дальнейшего рассмотрения ограничение:

а1jх12jх23jх34jх4bj:

  1. Используя найденное значение x*i (s) изменим ограничения задачи:

а1jх12jх23jх34jх4bj - aij x*i(s).

  1. Если список H не пустой, то увеличим s на единицу и перейдем к пункту 2. В противном случае завершим решение и найдем значение целевой функции и искомых переменных:

, i=1,4; ,

где S – множество номеров витков цикла алгоритма (шаги 2-6).