Вибір параметрів контролю з використанням методу динамічного програмування і методу гілок

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Московський Авіаційний Інститут
(Технічний Університет)
Кафедра 308
Курсова робота
Вибір параметрів контролю з використанням методу динамічного програмування і методу гілок і меж
Варіант II (2)

Виконала

студентка
групи КТ-515
Прийняв

Москва

2008р.

Зміст
Завдання
1. Метод динамічного програмування
1.1 Теоретична частина
2.2 Практична частина
- Ручний рахунок
- Лістинг програми
2. Метод гілок і меж
2.1 Теоретична частина
2.2 Практична частина
- Ручний рахунок
- Лістинг програми
Висновок
Література

Завдання
Варіант II (2)
Вибір параметрів контролю з використанням методу динамічного програмування і методу гілок і меж при непересічних елементах об'єкту контролю і обмеження по витратах на контроль З ≤ 16.
Вихідні дані: вірогідність відмов елементів і витрати на контроль параметрів.

Вибрати такі параметри, щоб З ≤ 16 при Q = Q max.

N

1
2
3
4
5
6
7
8
9
10
Qi
0.17
0.03
0.15
0.09
0.13
0.08
0.07
0.02
0.06
0.04
с (xi)
5
1
4
2
6
3
2
3
1
1

1. Метод динамічного програмування
1.1 Теоретична частина
Математично завдання вибору набору параметрів із заданої їх сукупності можна сформулювати наступним чином.
Нехай працездатність об'єкта контролю характеризується сукупністю n взаємопов'язаних параметрів, що утворюють множину S = {x 1, x 2, ..., x n}. Перевірка всіх параметрів з S тягне контроль всіх N елементів системи і дає однозначну відповідь: об'єкт справний, якщо все N елементів справні, або несправний, якщо принаймні один з елементів відмовив. Для "x i визначено підмножина R (x i) елементів, що перевіряються при контролі i-го параметра, причому припускаємо, що ці підмножини можуть перетинатися, тобто $ i, j: R (x i) ÇR (x j). Нехай W - деякий набір параметрів з множини S, тобто WÍS. Тоді WÇW = Æ і WÈW = S. Значення x i з S можна представити булевим вектором, причому
x i = 1, якщо x i ÎW,
0, якщо x i ÎW.
Завдання вибору параметрів у цьому випадку формулюється двояко:
1) знайти набір Ω, для якого
P (Ω) = max
при Σx i · c (x i) ≤ C; iЄΩ
2) знайти набір Ω, для якого
Σx i · c (x i) = min

при P (Ω) ≥ P з,
де P (Ω) - апостеріорна ймовірність працездатного стану об'єкта контролю при позитивному результаті контролю вибраних параметрів WÍS; с (x i) - витрати на контроль i-го параметра; Р з - необхідна достовірність контролю; С - обмеження на загальну вартість контролю.
Значення P (Ω) залежить від прийнятих припущень і може бути знайдено за формулою Байєса. Так, якщо припускати у виробі наявність лише однієї відмови, то
P (Ω) = Р 0 / 1-ΣР i,
iЄR (Ω)
де Р 0 = Π (1-р i) - апріорна ймовірність безвідмовної роботи об'єкта:
iЄR (S)
Р 0 = 1-ΣР i;
iЄR (S)

Р i - Нормована ймовірність відмови системи через відмову i-го елемента:

Р i = (p i / (1-p i)) / (1 ​​+ Σ p k / (1-p k);

kЄR (S)

p i - апріорна ймовірність відмови i-го елемента. Тоді ймовірність того, що відмова буде виявлено при перевірці k-го параметра, можна обчислити за формулою:
Q k = ΣP k
kЄR (x k)

При можливості наявності в ОК довільного числа відмов
P (Ω) = Π (1-p i) / Π (1-p i)
iЄR (S) iЄR (Ω)
Можна використовувати простий перебір варіантів, однак виникають при цьому обчислювальні труднощі не дозволяють зробити цього навіть для простих систем (при n> 10). У зв'язку з цим комплектування набору будемо трактувати як багатокроковий процес, що складається з послідовного вибору окремих параметрів.
Відповідно до загального принципу оптимальності розіб'ємо весь наявний ресурс вартості З на С відрізків одиничної довжини. (У практичних випадках задані позитивні величини з (x i) і С можна вважати завжди цілими. Якщо це не так, то необхідно перейти до більш дрібним вартісним одиницям залежно від розрядності дробової частини.). Розглянемо поряд з цікавій для нас вихідної завданням безліч аналогічних завдань
f (Y) = max λ (x), Y Є [0, C],
xЄX Y
де через X Y позначено множину невід'ємних цілочисельних векторів Ω, що відповідають наборам, до яких загальна вартість перевірки параметрів не перевершує величини Υ.
Нехай Υ 0 = min c (x i).
i = 1, ..., n
Тоді при всіх Υ Є [0, Υ 0] відповідні множини Χ Υ складаються, з одного нульового елемента і f (Y) = 0 для всіх таких Υ. Для ресурсу Υ Є [Υ 0, С] за загальною схемою динамічного програмування справедливі наступні рекурентні співвідношення:
f (Y k) = max [Q i + f [Y k - c (x i)] - G i (1)
iЄI Y
де k = Y 0, Y 0 +1, ..., C; I Y - безліч тих i, для яких з (x i) ≤ Y k, починаючи з номера k = max c (x i) рівняння (1) вирішується для всіх i = 1, ..., n;
G i = ΣP i - сума ймовірностей елементів i-го параметра, які перетинаються з
IЄR (x i) ∩ Ω l *
елементами підмножини Ω l *, утвореного на кроці Y k - c (x i).
Якщо "i, j; R (x i) ∩ R (x j) = Æ, то G i = 0 і
f (Y k) = max {Q i + f [Y k - c (x i)]} (2)
iЄI Y
Для вирішення цікавить нас завдання опишемо простий чисельний метод, який не потребує попереднього визначення всіх допустимих наборів і заснований на рекурентних співвідношеннях (1). Для всіх цілих Υ = Υ 0, С за формулою (1) обчислюються величини f (Y k) і при цьому фіксуються індекси i Yk *, на яких досягаються максимуми в (1). Шуканий вектор Ω формується послідовно включенням в набір параметра i Yk і підмножини Ω l *, зафіксованого на кроці Y k - c (x i). При цьому, якщо Y k Є Ω l *, то на даному кроці цей параметр виключається з розгляду, тому що кожен параметр може включатися в набір не більше одного разу. Якщо на деякій ν-му кроці виявиться, що f (Y ν) <f (Y ν -1), то в якості Ω ν * приймається підмножина Ω ν -1 * і фіксується параметр i Y ν -1, причому за f ( Y ν) <приймається значення f (Y ν -1). Зауважимо, що якщо в задачі P (Ω) = max при
Σx i · c (x i) ≤ C
iЄΩ
прийняти більш жорстке обмеження, а саме Σc (x i) = C, то останнє не допустимо, iЄΩ так як в цьому випадку max f (Y k) може бути менше max f (Y k -1) через те, що він досягається на іншому підмножині параметрів.
Загальна складність методу, очевидно, φ (n) ≤ c (n +1), тобто експонентна функція при переборі замінена лінійної функцією. При цьому для запам'ятовування проміжних значень необхідно k ≤ 2c осередків пам'яті. Якщо в якості максімізіруемого критерію використовувати P (Ω) = Π (1-p i) / Π (1-p i), то необхідно вирішити задачу динамічного iЄR (S) iЄR (Ω) програмування з мультиплікативним критерієм. Для цього достатньо прологаріфміровать цей вислів і позначити
V = lgP (Ω) = lgР 0-Σlg (1-p i). (3)
iЄR (Ω)
Так як вираз, що стоїть під знаком Σ в (3), негативно, то, V = V max тоді, коли максимальна величина суми, тобто в цьому випадку отримаємо нову цільову функцію
V = Σν i, де ν i = lg (1-p i),
iЄR (Ω)
володіє властивістю адитивності і обертається в максимум одночасно з P (Ω).

1.2 Практична частина
Ручний рахунок
Дані для розрахунку:

З ≤ 16

Таблиця 1

N

1
2
3
4
5
6
7
8
9
10
Qi
0.17
0.03
0.15
0.09
0.13
0.08
0.07
0.02
0.06
0.04
с (xi)
5
1
4
2
6
3
2
3
1
1
Для зручності розрахунків проранжіруем табліцу1 наступним чином:
Таблиця 2

N

9
10
2
4
7
6
8
3
1
5
Qi
0.06
0.04
0.03
0.09
0.07
0.08
0.02
0.15
0.17
0.13
с (xi)
1
1
1
2
2
3
3
4
5
6
Обчислення зведемо в таблицю 3:
Таблиця 3
Yk
f (Yk)
iYk
Ωl *
1
0,06
9
9
2
0,1
10
9,10
3
0,15
4
4,9
4
0,19
4
4,10,9
5
0,22
7
7,4,9
6
0,26
7
7,4,10,9
7
0,3
3
3,4,9
8
0,34
3
3,4,10,9
9
0,37
3
3,7,4,9
10
0,41
7
7,3,4,10,9
11
0,44
2
2,7,3,4,10,9
12
0,47
1
1,3,4,9
13
0,51
1
1,3,4,10,9
14
0,54
2
2,1,3,4,10,9
15
0,58
7
7,1,3,4,10,9
16
0,61
1
1,2,7,3,4,10,9
Оптимальний набір включає параметри Ω * = {1,2,7,3,4,10,9} при цьому
P (Ω) = 0,61 +0,16 = 0,77 і С = 16.
Лістинг програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ToolWin, ComCtrls, mdCONTROLS, Grids, StdCtrls, ExtCtrls, Unit2,
Buttons;
type
TForm1 = class (TForm)
sgH: TStringGrid;
sgP: TStringGrid;
sgC: TStringGrid;
sgQ: TStringGrid;
lbC: TLabeledEdit;
BitBtn1: TBitBtn;
Label1: TLabel;
sgW: TStringGrid;
Label2: TLabel;
procedure FormCreate (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure sgExit (Sender: TObject);
private
{Private declarations}
public
H: TH;
P: TP;
C: TC;
W: TW;
end;
var
Form1: TForm1;
implementation
{$ R *. dfm}
procedure TForm1.FormCreate (Sender: TObject);
var i, j: integer;
x: Byte;
f: TextFile;
begin
AssignFile (f, 'data.txt');
Reset (f);
sgW.Cells [0,0]: = 'W';
/ / Введення вихідної матриці
readln (f);
for j: = 1 to 10 do
begin
sgH.Cells [0, j]: = IntToStr (j);
sgW.Cells [0, j]: = IntToStr (j);
for i: = 1 to 10 do
begin
sgH.Cells [i, 0]: = IntToStr (i);
read (f, x);
sgH.Cells [i, j]: = IntToStr (x);
if x = 1 then
H [i-1, j-1]: = true
else
H [i-1, j-1]: = false;
end;
readln (f);
end;
/ / Введення ймовірностей
readln (f);
readln (f);
sgP.Cells [0,0]: = 'P';
for i: = 1 to 10 do
begin
read (f, P [i-1]);
sgP.Cells [i, 0]: = FloatToStr (P [i-1]);
end;
readln (f);
/ / Введення вартостей
readln (f);
readln (f);
sgC.Cells [0,0]: = 'C';
for j: = 1 to 10 do
begin
read (f, C [j-1]);
sgC.Cells [0, j]: = IntToStr (C [j-1]);
end;
CloseFile (f);
/ / Введення ймовірностей виявлення відмови
sgQ.Cells [0,0]: = 'Q';
for j: = 1 to 10 do
sgQ.Cells [0, j]: = FloatToStr (Q (j-1, H, P));
lbC.Text: = '1 ';
end;
procedure TForm1.BitBtn1Click (Sender: TObject);
var i: integer;
begin
label1.Caption: = FloatToStr (maxf (1, StrToInt (lbC.Text), H, P, C, W));
for i: = 1 to 10 do
begin
sgW.Cells [2, i]: = IntToStr (W [i-1]. N);
if W [i-1]. E then
sgW.Cells [1, i]: = '1 '
else
sgW.Cells [1, i]: = '0 ';
end;
end;
procedure TForm1.sgExit (Sender: TObject);
var i, j: integer;
begin
for j: = 1 to 10 do
for i: = 1 to 10 do
if sgH.Cells [i, j] = '1 'then
H [i-1, j-1]: = true
else
H [i-1, j-1]: = false;
for i: = 1 to 10 do
P [i-1]: = StrToFloat (sgP.Cells [i, 0]);
for j: = 1 to 10 do
C [j-1]: = StrToInt (sgC.Cells [0, j]);
/ / Введення ймовірностей виявлення відмови
for j: = 1 to 10 do
sgQ.Cells [0, j]: = FloatToStr (Q (j-1, H, P));
end;
end.
unit Unit2;
interface
type
TH = array [0 .. 9, 0 .. 9] of boolean;
TP = array [0 .. 9] of extended;
TC = array [0 .. 9] of integer;
TDateW = record
E: boolean;
N: integer;
end;
TW = array [0 .. 9] of TDateW;
function Q (j: integer; H: TH; P: TP): extended;
function maxf (n, Yk: integer; H: TH; P: TP; C: TC; var W: TW): extended;
implementation
function Q (j: integer; H: TH; P: TP): extended;
var i: integer;
begin
Result: = 0;
for i: = 0 to 9 do
if H [i, j] then
Result: = Result + P [i];
end;
function G (j: integer; H: TH; P: TP; W: TW): extended;
var i, k: integer;
begin
Result: = 0;
for i: = 0 to 9 do
if H [i, j] then
for k: = 0 to 9 do
if W [k]. E and H [i, k] then
begin
Result: = Result + P [i];
Break;
end;
end;
function f (n, Yk, j: integer; H: TH; P: TP; C: TC; var W: TW): extended;
begin
Result: = Q (j, H, P) + maxf (n +1, Yk - C [j], H, P, C, W) - G (j, H, P, W);
end;
function maxf (n, Yk: integer; H: TH; P: TP; C: TC; var W: TW): extended;
var j, i: integer;
ft: extended;
Wt: TW;
begin
Result: = 0;
for i: = 0 to 9 do
begin
W [i]. E: = false;
W [i]. N: = 0;
end;
for j: = 0 to 9 do
if C [j] <= Yk then
begin
for i: = 0 to 9 do
begin
Wt [i]. E: = false;
Wt [i]. N: = 0;
end;
ft: = f (n, Yk, j, H, P, C, Wt);
if Result <ft then
begin
Result: = ft;
W: = Wt;
W [j]. E: = true;
W [j]. N: = n;
end;
end;
end;
end.

2. Метод гілок і меж
2.1 Теоретична частина
Розглянемо таку задачу цілочисельного програмування. Потрібно максимізувати вираз:
n
L = Σc j ∙ x j (4)
j = 1
при обмеженнях
n
Σа ij ∙ x j ≤ b i, i = 1, ..., m (5)
j = 1
x j Є {0, 1}, j = 1, ..., n
причому з j ≥ 0, a ij ≥ 0.
Метод гілок і меж використовує послідовно-паралельну схему побудови дерева можливих варіантів. Спочатку шукають допустимий план і для кожного можливого варіанту визначають верхню межу цільової функції. Гілки дерева можливих варіантів, для яких верхня межа нижче наближеного рішення, з подальшого розгляду виключають.
Ефективність обчислювальних алгоритмів залежить від точності і простоти способу визначення верхньої межі можливих рішень і точності визначення наближеного рішення. Чим точніше спосіб визначення верхньої межі цільової функції, тим більше безперспективних гілок відсікається в процесі оптимізації. Однак збільшення точності розрахунку верхніх меж пов'язано зі зростанням обсягу обчислень. Наприклад, якщо для оцінки верхньої межі використовувати симплекс-метод, то результат буде досить точним, але зажадає великого обсягу обчислювальної роботи.
Розглянемо алгоритм вирішення задачі методом гілок і меж з простим і ефективним способом оцінки верхньої межі цільової функції.
Позначимо: U - множина змінних x j; S - безліч фіксованих змінних, що увійшли до допустиме рішення; E s - безліч залежних змінних, які не можуть бути включені в безліч S, так як для них виконується нерівність
а ij> b i - Σа ij ∙ x j, i = 1, ..., m
x j Єs
G S - безліч вільних змінних, з яких проводиться вибір для включення в S черговий змінної.
Розглянемо спочатку одновимірну задачу, коли m = 1 і завдання (4) має тільки одне обмеження виду (5).
Позначимо h 1 j = c j / a 1 j і припустимо, що x j Єs (j = 1, ..., k <n) і виконуються умови
h 1, k +1 ≥ h 1, k +2 ≥ ... ≥ h 1 l, l ≤ n,
l
Σa 1 j> b 1 - Σ a 1 j ∙ x j,
j = k +1 x j Єs
l-1
Σa 1 j b 1 - Σ a 1 j ∙ x j,
j = k +1 x j Єs
Умови означають, що в безліч S без порушення нерівності (5) можна додатково ввести елементи x k +1, x k +2, ..., x l -1. При введенні в безліч S елементів x k +1, x k +2, ..., x l нерівність (5) не виконується.
Для визначення верхньої межі рішення може бути використано вираз
H s = Σc j ∙ x j + L s ',
x j Єs
де
l-1
L s '= Σс j + h 1 l Δ b 1,
j = k +1
l-1
Δ b 1 = b 1 - Σ a 1 j ∙ x j - Σa 1 j.
x j Єs   j = k +1
З умов випливає, що L s ' не менше максимального значення величини
Σc j ∙ x j
x j ЄG S
при обмеженнях
Σ a 1j ∙ x j b 1 - Σ a 1j ∙ x j = b 1 ',
x j ЄG S                               x j Єs
x j Є {0, 1}, x j ЄG S,
Вибір черговий змінної для включення в безліч S проводиться за допомогою умови

h 1r (x r) = max h 1j (x j)
x j ЄG S

Для обраної змінної x r визначаються величини H s (x r) і H s (x r), тобто в S включаються x r = 1 або x r = 0.

Якщо в процесі вирішення виявиться, що в множині G S немає елементів, які можуть бути введені в безліч S без порушення обмеження (5), то отримане рішення L s = Σc j ∙ x j приймається в якості першого наближеного   x j Єs рішення L 0.
Усі вершини дерева можливих варіантів, для яких виконуються умови
H s ≤ L 0, з подальшого розгляду виключаються.
З решти гілок вибирається гілка з максимальним значенням H s, і процес пошуку оптимального варіанту продовжується. Якщо в процесі вирішення буде знайдено L s = Σc j ∙ x j > L 0, то отримане рішення приймається
x j Єs
в якості нового наближеного результату. Обчислювальна процедура закінчується, якщо для решти гілок виконується умова H s ≤ L 0.
2.2 Практична частина
Ручний рахунок
Дані для розрахунку:

З ≤ 16

Таблиця 4

N

1
2
3
4
5
6
7
8
9
10
Qi
0.17
0.03
0.15
0.09
0.13
0.08
0.07
0.02
0.06
0.04
с (xi)
5
1
4
2
6
3
2
3
1
1
hj
0.034
0.03
0.0375
0.045
0.0217
0.0267
0.035
0.0067
0.06
0.04

Для зручності розрахунків проранжіруем таблицю 4 в порядку убування h j і привласнимо нові номери елементів, наступним чином:
Таблиця 5

N

1
2
3
4
5
6
7
8
9
10

n

9
4
10
3
7
1
2
6
5
8
Qi
0.06
0.09
0.04
0.15
0.07
0.17
0.03
0.08
0.13
0.02
с (xi)
1
2
1
4
2
5
1
3
6
3
hj
0.06
0.045
0.04
0.0375
0.035
0.034
0.03
0.0267
0.02167
0.0067
Для формування таблиці 6 зробимо розрахунки:
1)
8
Σс j = 19> b 1 - Σ c j ∙ x j = 16-0 = 16;
j = 1 x j Єs
7
Σс j = 16 £ 16;
j = 1
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-0-16 = 0
x j Єs   j = 1
H s (x 1) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
8
Σс j = 18> b 1 - Σ c j ∙ x j = 16-0 = 16;
j = 2 x j Єs
7
Σс j = 15 £ 16;
j = 2
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-0-15 = 1
x j Єs                       j = 2
H s (x 1) = q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.5767

2)
8
Σс j = 18> b 1 - Σ c j ∙ x j = 16-1 = 15;
j = 2 x j Єs
7
Σс j = 15 £ 15;
j = 2
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-15 = 0
xjЄS j = 2
H s (x 2) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
8
Σс j = 16> b 1 - Σ c j ∙ x j = 16-1 = 15;
j = 3 xjЄS
7
Σс j = 13 £ 15;
j = 3
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-13 = 2
xjЄS j = 3
H s (x 2) = q1 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.5734
3)
8
Σс j = 16> b 1 - Σ c j ∙ x j = 16-1-2 = 13;
j = 3 xjЄS
7
Σс j = 13 £ 13;
j = 3
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-13 = 0
xjЄS j = 3
H s (x 3) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
8
Σс j = 15> b 1 - Σ c j ∙ x j = 16-1-2 = 13;
j = 4 xjЄS
7
Σс j = 12 £ 13;
j = 4

7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-12 = 1
xjЄS j = 4
H s (x 3) = q1 + q2 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.5967
4)
8
Σс j = 15> b 1 - Σ c j ∙ x j = 16-1-2-1 = 12;
j = 4 xjЄS
7
Σс j = 12 £ 12;
j = 4
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-12 = 0
xjЄS j = 4
H s (x 4) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
9
Σс j = 17> b 1 - Σ c j ∙ x j = 16-1-2-1 = 12;
j = 5 xjЄS
8
Σс j = 11 £ 12;
j = 5
8
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-11 = 1
xjЄS j = 5
H s (x 4) = q1 + q2 + q3 + q5 + q6 + q7 + q8 + h 9 Δ з = 0.56167
5)
8
Σс j = 11> b 1 - Σ c j ∙ x j = 16-1-2-1-4 = 8;
j = 5 xjЄS
7
Σс j = 8 £ 8;
j = 5
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-4-8 = 0
xjЄS j = 5
H s (x 5) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
8
Σс j = 9> b 1 - Σ c j ∙ x j = 16-1-2-1-4 = 8;
j = 6 xjЄS

7
Σс j = 6 £ 8;
j = 6
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-4-6 = 2
xjЄS j = 6
H s (x 5) = q1 + q2 + q3 + q4 + q6 + q7 + h 8 Δ з = 0.5934
6)
8
Σс j = 9> b 1 - Σ c j ∙ x j = 16-1-2-1-4-2 = 6;
j = 6 xjЄS
7
Σс j = 6 £ 6;
j = 6
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-4-2-6 = 0
xjЄS j = 6
H s (x 6) = q1 + q2 + q3 + q4 + q5 + q6 + q7 + h 8 Δ з = 0.61
9
Σс j = 10> b 1 - Σ c j ∙ x j = 16-1-2-1-4-2 = 6;
j = 7 xjЄS
8
Σс j = 4 £ 6;
j = 7
7
Δ з = з - Σ з j ∙ x j - Σс j = 16-1-2-1-4-2-4 = 2
xjЄS j = 6
H s (x 6) = q1 + q2 + q3 + q4 + q5 + q7 + q8 + h 9 Δ з = 0.56334
7) C s = Σ c j ∙ x j, перевіряємо умову С-С s. Якщо з (x j)> С-С s, то ці
xjЄS
елементи вводяться в безліч E s.
E s = {x8, x9, x10}
з 7 = 1> b 1 - Σ c j ∙ x j = 16-1-2-1-4-2-5 = 1;
xjЄS
з 7 = 1 £ 1;

Умова не виконується.
8) L s = q1 + q2 + q3 + q4 + q5 + q6 + q7 = 0.61
L s приймається як наближеного рішення L 0. Так як всі вершини дерева, для яких виконується умова H s £ L 0, з подальшого розгляду виключаються, то процес розрахунку припиняється.
Таблиця 6

S
Es
Gs
Hs
xr
Hs (xr)
Hs (xr)
L0
1
Æ
Æ
1 ... 10
0.61
x1
0.61
0.5767
2
x1
Æ
2 ... 10
0.61
x2
0.61
0.5734
3
x1, x2
Æ
3 ... 10
0.61
x3
0.61
0.5967
4
x1, x2, x3
Æ
4 ... 10
0.61
x4
0.61
0.56167
5
x1, x2, x3, x4
Æ
5 ... 10
0.61
x5
0.61
0.5934
6
x1, x2, x3, x4, x5
Æ
6 ... 10
0.61
x6
0.61
0.56334
7
x1, x2, x3, x4, x5, x6
8,9,10
7
0.61
x7
0.61
0.56334
8
x1, x2, x3, x4, x5, x6, x7
8,9,10
Æ
-
-
-
-
0.61
Для контролю системи необхідно використовувати наступні параметри контролю: x1, x2, x3, x4, x5, x6, x7.
Перейдемо на стару нумерацію елементів і побудуємо дерево можливих варіантів рішення. Воно представлено на рис.1. Біля кожної вершини вказана верхня межа рішення. Тому що всі ці оцінки не перевищують величини 0,61, то, отже, отримане рішення L 0 = 0,61 є оптимальним. Таким чином необхідно використовувати наступні параметри контролю: x9, x4, x10, x3, x7, x1, x2.

S = Æ
х9
х4
х9
х2
х3
х4
х1
х10
х7
х3
х10
х2
х7
х1
0,61
0,5734
0,5967
0,56167
0,5934
0,56334
0,56334
0,61
0,61
0,61
0,61
0,61
0,61
0,61
0,5767
Рис.1
 

Лістинг програми
program vetvi;
const
maxmatrix = 1000;
maxsize = 200;
type linear = array [1 .. 10000] of integer;
label skip;
var matrix: array [1 .. 1000] of pointer;
n: integer;
sizeofm: word;
q, w, e, r: integer;
start_m: integer;
sm: ^ linear;
bestx, besty: integer;
bz: integer;
ochered: array [1 .. 1000] of
record
id: integer;
ocenka: integer;
end;
nochered: integer;
workm, workc: integer;
leftm, rightm: integer;
first, last: integer;
best: integer;
bestmatr: array [1 .. maxsize] of integer;
bestmatr1: array [1 .. maxsize] of integer;
curr: integer;
procedure swapo (a, b: integer);
begin
ochered [1000]: = ochered [a];
ochered [a]: = ochered [b];
ochered [b]: = ochered [1000];
end;
procedure addochered (id, ocenka: integer);
var
curr: integer;
begin
inc (nochered);
ochered [nochered]. id: = id;
ochered [nochered]. ocenka: = ocenka;
{Uravnoveshivanie ocheredi}
curr: = nochered;
while true do
begin
if curr = 1 then break;
if ochered [curr]. ocenka <ochered [curr div 2]. ocenka
then
begin
swapo (curr, curr div 2);
curr: = curr div 2;
end
else break;
end;
end;
procedure getochered (var id, ocenka: integer);
var
curr: integer;
begin
id: = ochered [1]. id;
ocenka: = ochered [1]. ocenka;
ochered [1]: = ochered [nochered];
dec (nochered);
curr: = 1;
while true do
begin
if (curr * 2 +1> nochered) then break;
if (ochered [curr * 2]. ocenka <ochered [curr]. ocenka) or
(Ochered [curr * 2 +1]. Ocenka <ochered [curr]. Ocenka) then
begin
if ochered [curr * 2]. ocenka> ochered [curr * 2 +1]. ocenka
then
begin
swapo (curr * 2 +1, curr);
curr: = curr * 2 +1;
end
else
begin
swapo (curr * 2, curr);
curr: = curr * 2;
end;
end else break;
end;
end;
function getid: integer;
var q: integer;
qw: ^ linear;
begin
if memavail <10000 then
begin
q: = ochered [nochered]. id;
{Exit;}
end else
begin
for q: = 1 to maxmatrix do
if matrix [q] = nil then break;
getmem (matrix [q], sizeofm);
end;
qw: = matrix [q];
fillchar (qw ^, sizeofm, 0);
getid: = q;
end;
procedure freeid (id: integer);
begin
freemem (matrix [id], sizeofm);
matrix [id]: = nil;
end;
function i (x, y: integer): integer;
begin
i: = (y-1) * n + x +1;
end;
function simplize (id: integer): integer;
var
q, w: integer;
t: ^ linear;
add: integer;
min: integer;
begin
t: = matrix [id];
add: = 0;
for q: = 1 to n do
begin
min: = maxint;
for w: = 1 to n do
if t ^ [i (w, q)] <> -1 then
if min> t ^ [i (w, q)] then min: = t ^ [i (w, q)];
if min <> 0 then
for w: = 1 to n do
if t ^ [i (w, q)] <> -1 then
dec (t ^ [i (w, q)], min);
if min> 32000 then min: = 0;
inc (add, min);
end;
for q: = 1 to n do
begin
min: = maxint;
for w: = 1 to n do
if t ^ [i (q, w)] <> -1 then
if min> t ^ [i (q, w)] then min: = t ^ [i (q, w)];
if min <> 0 then
for w: = 1 to n do
if t ^ [i (q, w)] <> -1 then
dec (t ^ [i (q, w)], min);
if min> 32000 then min: = 0;
inc (add, min);
end;
simplize: = add;
end;
function bestziro (id: integer): integer;
var
t: ^ linear;
q, w, e, x, y: integer;
min1, min2: integer;
l1, l2: array [1 .. maxsize] of integer;
begin
t: = matrix [id];
fillchar (l1, sizeof (l1), 0);
fillchar (l2, sizeof (l2), 0);
for q: = 1 to n do
begin
min1: = maxint; min2: = maxint;
for w: = 1 to n do
if t ^ [i (w, q)] <> -1 then
begin
if min2> t ^ [i (w, q)] then min2: = t ^ [i (w, q)];
if min1> min2 then
begin
e: = min1;
min1: = min2;
min2: = e;
end;
end;
if min1 <> 0 then min2: = 0;
if min2> 32000 then min2: = 0;
l2 [q]: = min2;
end;
for q: = 1 to n do
begin
min1: = maxint; min2: = maxint;
for w: = 1 to n do
if t ^ [i (q, w)] <> -1 then
begin
if min2> t ^ [i (q, w)] then min2: = t ^ [i (q, w)];
if min1> min2 then
begin
e: = min1;
min1: = min2;
min2: = e;
end;
end;
if min1 <> 0 then min2: = 0;
if min2> 32000 then min2: = 0;
l1 [q]: = min2;
end;
bz: =- 32000;
bestx: = 0; besty: = 0;
for y: = n downto 1 do
for x: = 1 to n do
if (t ^ [i (x, y)] = 0) then
if l1 [x] + l2 [y]> bz then
begin
bestx: = x;
besty: = y;
bz: = l1 [x] + l2 [y];
end;
bestziro: = bz;
end;
begin
assign (input, 'input.txt');
assign (output, 'vetvi.out');
reset (input);
rewrite (output);
nochered: = 0;
read (n);
sizeofm: = n * (n +2) * 2 +2;
start_m: = getid;
sm: = matrix [start_m];
for q: = 1 to n do
for w: = 1 to n do
read (sm ^ [i (w, q)]);
addochered (start_m, 0);
{;
bestziro (start_m);}
{Sobstvenno reshenie}
best: = maxint;
while true do
begin
if nochered = 0 then break;
getochered (workm, workc);
{Process MATRIX}
inc (workc, simplize (workm));
if workc> best then goto skip;
sm: = matrix [workm];
if sm ^ [1] = n-1 then
begin
best: = workc;
for q: = 1 to n do
begin
bestmatr [q]: = sm ^ [i (q, n +2)];
bestmatr1 [q]: = sm ^ [i (q, n +1)];
end;
goto skip;
end;
q: = bestziro (workm);
if q =- 32000 then goto skip;
{Pravaia vetka}
if (bestx = 0) or (besty = 0) then goto skip;
rightm: = getid;
move (matrix [workm] ^, matrix [rightm] ^, sizeofm);
sm: = matrix [rightm];
sm ^ [i (bestx, besty )]:=- 1;
addochered (rightm, workc + q);
{Levaia vetka}
leftm: = getid;
move (matrix [workm] ^, matrix [leftm] ^, sizeofm);
sm: = matrix [leftm];
{Dobavliaetsia rebro iz bestx v besty}
inc (sm ^ [1]);
sm ^ [i (bestx, n +2)]: = besty;
sm ^ [i (besty, n +1)]: = bestx;
first: = bestx; last: = besty;
if sm ^ [1] <> n-1 then
begin
while true do
begin
if sm ^ [i (last, n +2)] = 0 then break;
last: = sm ^ [i (last, n +2)];
end;
while true do
begin
if sm ^ [i (first, n +1)] = 0 then break;
first: = sm ^ [i (first, n +1)];
end;
sm ^ [i (last, first )]:=- 1;
sm ^ [i (first, last )]:=- 1;
sm ^ [i (besty, bestx )]:=- 1;
end;
for w: = 1 to n do
begin
sm ^ [i (w, besty )]:=- 1;
sm ^ [i (bestx, w )]:=- 1;
end;
addochered (leftm, workc);
skip:
{Free Matrix}
freeid (workm);
end;
{Freeid (start_m);}
if best = maxint then
begin
writeln ('Шлях не існує');
end else
begin
writeln ('Довжина шляху:', best);
for q: = 1 to n do
if bestmatr [q] = 0 then break;
e: = q;
for curr: = 1 to n do
if bestmatr [curr] = q then break;
while true do
begin
write (curr, '');
curr: = bestmatr1 [curr];
if curr = 0 then
begin
writeln (e);
break;
end;
end;
end;
close (input);
close (output);
end.

Висновок
При вирішенні поставленого завдання обидва методи дали однаковий результат, що показує правильність розуміння та виконання курсової роботи. Таким чином, необхідно використовувати наступні параметри контролю: x9, x4, x10, x3, x7, x1, x2.
Метод динамічного програмування досить простий для виконання, але має суттєвий недолік: при його використанні для рахунку вручну виникають обчислювальні труднощі навіть для простих систем.
Метод гілок і меж є більш складним для розуміння, але він виявився простішим при ручному рахунку. Недоліком є ​​велика складність програмування методу.

Література
1. Селезньов А.В., Добриця Б.Т., убар Р.Р. «Проектування автоматизованих систем контролю бортового обладнання літальних апаратів» стор 90-95
2. Алексєєв О.Г. «Комплексне застосування методів дискретної оптимізації» стор 18-25
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
160.5кб. | скачати


Схожі роботи:
Використання методу гілок і меж при адаптації робочого навантаження до параметрів обчислювального
Розрахунок вихідний реакції лінійної ланцюга за допомогою операційного методу і методу прямої згортки
Дослідження методу ортогоналізації й методу сполучених градієнтів
Вибір методу конструювання і документування електронних засобів
Планування малого бізнесу з використанням методу послідовного опису дій
Ревізія як елемент методу економічного контролю 2
Ревізія як елемент методу економічного контролю
Дослідження соціально-трудових процесів на підприємстві з використанням методу дескриптивного моделювання
Діагностика і вибір методу лікування при первинному травматичному вивиху плеча імпресійного перелому
© Усі права захищені
написати до нас