Целочисленное программирование. Метод ветвей и границ



 

Из предыдущего метода было получено:

 

F опт = 129/22

 

XT ={ 7/22, 61/22 , 0 , 0 }

 

 

Введём дополнительное ограничение на x2

 

x2 ≤ [61/22]

x2 ≥ [61/22] + 1

 

x2 ≤ 2

x2 ≥ 3

 

Задача 1

 

F = x1 + 2x2 à min

 


5x1 + 7x2 ≤ 21

-x1 + 3x2 ≤ 8

x2 ≥ 3

x1,x2 ≥ 0

 

Эта задача решения не имеет 

 

 

Задача 2

 

F = x1 + 2x2 à min

 

5x1 + 7x2 ≤ 21

-x1 + 3x2 ≤ 8

x2 ≤ 2

x1,x2 ≥ 0

 

 

x3 = 21 – ( 5x1 + 7x2 )

x4 = 8 – ( -x1 + 3x2 )

x5 = 2 – (x2 )

 

-F = 0 – ( x1 + 2x2 ) à min

 

  β x1 x2
x3     21   -14 5   0 7   -7
x4     8   -6 -1   0 3   -3
x5   2   2 0   0 1   1
-F     0   -4 1    0 2   -2

 

λ = 1

 

  β x1 x5
x3   7   7/5 5   1/5 -7    -7/5
x4     2   7/5 -1   1/5 -3    -7/5
x2     2   0 0   0 1   0
-F     -4    -7/5 1    -1/5 -2   7/5

 

λ = 1/5

 

  β x3 x5
x1     7/5     1/5      -7/5    
x4     17/5      1/5      -22/5    
x2     2     0         1        
-F     -27/5     -1/5     -3/5     

 

F опт = 27/5

 

XT ={ 7/5, 2 , 0 , 17/5 , 0}

 

Введём дополнительное ограничение на x1

 

x1 ≤ [ 7/5]

x1 ≥ [7/5] + 1

x1 ≤ 1

x1 ≥ 2

 

 

Задача 1

 

F = x1 + 2x2 à min

 

5x1 + 7x2 ≤ 21

-x1 + 3x2 ≤ 8

x2 ≤ 2

x1 ≥ 2

x1,x2 ≥ 0

 

Эта задача решения не имеет. 

 

Задача 2

 

F = x1 + 2x2 à min

 

5x1 + 7x2 ≤ 21

-x1 + 3x2 ≤ 8

x2 ≤ 2

x1 ≤ 1

x1,x2 ≥ 0

 

x3 = 21 – ( 5x1 + 7x2 )

x4 = 8 – ( -x1 + 3x2 )

x5 = 2 – (x2 )

x6 = 1 – ( x1 )

 

-F = 0 – ( x1 + 2x2 ) à min

 

 

  β x1 x2
x3     21   -14 5   0 7   -7
x4     8   -6 -1   0 3   -3
x5     2   2 0   0 1   1
x6     1   0 1   0 0   0 
-F     0   -4 1   0 2   -2

 

λ = 1

 

  β x1 x5
x3     7     -5 5    -5 -7   0
x4     2   1 -1   1 -3     0
x2     2   0 0   0 1   0
x6   1   1 1   1 0   0 
-F     -4   -1 1     -1 -2     0

 

λ = 1

 

 

 

  β x6 x5
x3     2      -5     -7       
x4     3        1         -3     
x2     2        0         1        
x1     1         1        0          
-F     -5      -1      -2     

 

F опт = 5

XT ={ 1, 2 , 2 , 3 , 0 , 0}

 

 

Дерево ветвления задачи:

 

 

F =129/22

 

 

F=27/5

F =5
4. Решение задачи булевского программирования о распределении капиталовложения.

4.2Булевское программирование. МетодБаллаша

Задание:

Вариант

Проект

Расходы (млн. грн. в год)

Прибыль (млн. грн)
1-й год 2-й год 3-й год  

19

  1 4 6 3   10
2 9 7 8 15
3 7 9 9 10
4 5 5 6 25
5 6 4 6 20
Доступный капитал 30 30 30  

Решение задач с булевыми переменными можно производить методом ветвей и границ, как с обычными целочисленными переменными, для ко­торых заданы граничные условия . Однако применение такого метода для данных задач в ряде случаев оказывается нецелесообразным. Существуют специальные методы частичного перебора для решения таких задач, наиболее совершенный из них называется аддитивным алгоритмом Баллаша с фильтром.

Суть этого метода сводится к следующему:

1) расположить переменные по возрастанию коэффициентов при них в целевой функции;

2) принять некоторый набор значений X, удовлетворяющий всем ограничениям;

3) значение целевой функции при удовлетворении п. 2 принять в качестве дополнительного фильтрующего ограничения (фильтра);

4) методом перебора X определить значение фильтрующего ограничения и проверить удовлетворение его заданным ограничениям;

5) если при некотором наборе X   значение фильтрующего огра­ничения окажется для целевой функции лучшим, следует от первона­чального набора перейти к новому и продолжить процедуру.

 

 

Составим математическую модель данной ЗЛП с булевскими переменными

1: 4x1 + 9x2 + 7x3+ 5x4+6x5 ≤ 30

2: 6x1 + 7x2 + 9x3 + 5x4 + 4x5 ≤ 30

3: 3x1+ 8x2 + 9x3 + 6x4 + 6x5 ≤ 30

F = 10x1 + 15x2 + 10x3 + 25x4 + 20x5 à max

 

Примем значение целевой функции на наборе 00000 за фильтрующее.

 

X1

X2

X3

X4

X5

 Выполнение ограничений

F 1 2 3
1 0 0 0 0 0 0 + + + Fф=0
2 0 0 0 0 1 20 + + + 20
3 0 0 0 1 0 25 + + + 25
4 0 0 0 1 1 45 + + + 45
5 0 0 1 0 0 10       -
6 0 0 1 0 1 30       -
7 0 0 1 1 0 35       -
8 0 0 1 1 1 55 + + + 55
9 0 1 0 0 0 15       -
10 0 1 0 0 1 35       -
11 0 1 0 1 0 40       -
12 0 1 0 1 1 60 + + + 60
13 0 1 1 0 0 25       -
14 0 1 1 0 1 45       -
15 0 1 1 1 0 50       -
16 0 1 1 1 1 70 + + + 70
17 1 0 0 0 0 10       -
18 1 0 0 0 1 30       -
19 1 0 0 1 0 35       -
20 1 0 0 1 1 55       -
21 1 0 1 0 0 20       -
22 1 0 1 0 1 40       -
23 1 0 1 1 0 45       -
24 1 0 1 1 1 65       -
25 1 1 0 0 0 25       -
26 1 1 0 0 1 45       -
27 1 1 0 1 0 50       -
28 1 1 0 1 1 70       -
29 1 1 1 0 0 35       -
30 1 1 1 0 1 55       -
31 1 1 1 1 0 60       -
32 1 1 1 1 1 80 -     -

 

 

Фильтрующее ограничение:

 

Максимальное значение 70 функция достигает на наборе 01111. С помошью фильтра Баллаша колличество вычислений было сокращено на 39%.


Поиск локального минимума метом одномерной оптимизации

Метод дихотомии ( деление отрезка пополам ).

 

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

 

Проведем вычисление функции этим методом до тех пор пока длина уменьшаемого отрезка   не станет меньше точности e=0.05, для этого потребуется примерно четыре итерации.

 

1:

Найдем длину интервала

 

 

 Выберем точки, равноотстоящие от концов заданного интервала

 

 

Теперь не обходимо вычислить значение функции в выбранных точках

 

Как видно из вычисленных значений точка x1 является экстремумом из выбранных нами значений на этом шаге, а значит концом отрезка становиться середина, тем самым мы отсекаем половину отрезка, а бывшая точка x1 становиться серединой нового отрезка 

Так как длина полученного отрезка после первой итерации больше е

 

то мы переходим ко второй итерации с новыми значениями, аналогично повторяя первую.

 

2:

 

 Условия окончания не выполнятся переходим к следующей итерации.

 

3:

 

 

 

4:

 

 

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

Для более наглядного представления проделанных выше действий можно свести результаты в таблицу:

 

Шаг Левая граница Правая граница Точка экстремума Значение экстремума
1 0.5                1 0.625 -3.133
2 0.5 0.75 0.563 -3.395
3 0.5 0.625 0.531 -3.501
4 0.5 0.563 0.516 -3.548

 


Дата добавления: 2018-10-27; просмотров: 182; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!