4. Laboratoriya mashg’uloti Mavzu: Kommivoyajer haqidagi masala Ishning maqsadi



Download 84,94 Kb.
bet3/4
Sana20.06.2022
Hajmi84,94 Kb.
#684612
1   2   3   4
Bog'liq
14.2 lab

Dinamik dasturlash
#include
using namespace std;

#define INT_MAX 999999


int n = 4;


int dist[10][10] = {
{0,20,42,25},
{20,0,30,34},
{42,30,0,10},
{25,34,10,0}
};
int VISITED_ALL = (1 << n) - 1;

int dp[16][4];


int tsp(int mask, int pos) {

if (mask == VISITED_ALL) {


return dist[pos][0];
}
if (dp[mask][pos] != -1) {
return dp[mask][pos];
}

// Endi joriy tugundan biz har bir boshqa tugunga o'tishga harakat qilamiz va minimalni olamiz


int ans = INT_MAX;

// Barcha o'rganilmagan shaharlarga tashrif buyuring va eng yaxshi marshrutni tanlang


for (int city = 0; city < n; city++) {

if ((mask & (1 << city)) == 0) {


int newAns = dist[pos][city] + tsp(mask | (1 << city), city);


ans = min(ans, newAns);
}

}


return dp[mask][pos] = ans;
}

int main() {


setlocale(LC_ALL, "ru");
/* massivni ishga tushirish dp*/
for (int i = 0; i < (1 << n); i++) {
for (int j = 0; j < n; j++) {
dp[i][j] = -1;
}
}
cout << " Sayohatchi minimal yo'li " << tsp(1, 0);

return 0;


}
Kommivoyajer masalasi Dinamik dasturlash orqali
Tarmoqli va chegaralangan usul deganda optimal yechimni topish uchun daraxtsimon tuzilishga ega bo‘lgan va baholash masalalarini yechish natijalaridan foydalanadigan masalani yechish algoritmi tushuniladi. Daraxt tuzilishi odatda shoxli daraxt deb ataladi.
CPni yechishning asosiy algoritmlaridan biri dinamik dasturlash tamoyiliga asoslanadi. Ushbu algoritmni taqdim etishda biz masalaning berilgan tipik talqiniga mos keladigan terminologiyaga amal qilamiz.
i ixtiyoriy shahar bo'lsin (i N) va V shahar 1 va shahar i bo'lmagan shaharlarning har qanday kichik to'plami bo'lsin. Har biri i shahardan boshlanib, 1-shaharda tugaydigan va faqat V to‘plam shaharlari orqali oraliq bo‘lib o‘tib, ularning har biriga bir martadan to‘liq kiruvchi yo‘llar to‘plamini M(i, V ) bilan belgilang. M(i, V ) to‘plamning eng qisqa yo‘li uzunligini B(i, V ) bilan belgilang. Yechilayotgan masala uchun B(i, V) Bellman funksiyasi hisoblanadi. Ko'rinib turibdiki, B(1, {2, 3, …, n}) - barcha shaharlardan o'tuvchi oddiy (o'z-o'zidan kesishmasdan) yopiq yo'lning istalgan minimal uzunligi.
Agar V bir elementli to'plam bo'lsa, V ={j}, bu erda j? 1 va j? i, u holda M (i, V) to'plam bitta m = (i, j, 1) yo'ldan iborat. Shunday qilib
i N, j {2, 3,…, n}, j ? i.(1.1)
Faraz qilaylik, barcha i N {1} va barcha mumkin boʻlgan k-elementlar (k < n - 1) V toʻplamlar uchun V(i, V ) funksiyaning qiymatlari allaqachon hisoblangan boʻlsin. Keyin V' N {1, i} to'plamning ixtiyoriy (k + 1) elementli to'plami bo'lgan B(i, V') qiymati formula bo'yicha hisoblanadi.
(1.2)
(1.1)-(1.12) tenglamalar Kommivoyajer masalasini echish uchun dinamik dasturlash rekursiv munosabatlar bo'lib, ular teskari Bellman usulini amalga oshirishni ta'minlaydi. Masalaning hisoblash murakkabligi , bu erda S ixtiyoriy doimiy (S > 0), n - shaharlar soni.
1.1-misol matritsa bilan aniqlangan Kommivoyajer masalasini hal qiling:

Birinchidan, (1.1) formuladan foydalanib, biz V(i, {j}) qiymatlarini aniqlaymiz:
B(2, {3}) = 5 + 6 = 11; B(3, {2}) = 2 + 2 = 4; B(4, {2}) = 5 + 2 = 7;
B(2, {4}) = 2 + 1 = 3; B(3, {4}) = 1 + 1 = 2; B(4, {3}) = 4 + 6 = 10.
Bundan tashqari, (1.2) formulaga muvofiq, biz ketma-ket ravishda olamiz (quyida yozilgan har bir tenglikning chap tomonida j parametrining qiymatlari ajratib ko'rsatilgan, bunda (1.2) ning o'ng tomonida ko'rsatilgan minimal ko'rsatilgan. hisoblash paytida amalga oshiriladi):
B(2, {3, 4}) = min[s23 + B(3,{4}); s24 + B(4,{3})] = min(5 + 2; 2 + 10)=7;
B(3, {2, 4}) = min [s32 + B(2,{ 4}); s34 + B(4,{ 2})] = min(2 + 3; 1 + 7 )=5;
B(4, {2, 3}) = min[s42 + B(2,{ 3}); s43 + B(3,{ 2})] = min(5 + 11; 4 +4)=8;
B(1, {2, 3, 4}) = min [s12 + B(2,{3,4}) s13 + B(3,{ 2,4}) s14 + B(4,{2,3} )] =
= min(4+7; 3+5; 4+8) = 8.
Demak, ushbu misoldagi mezonning optimal qiymati 8 ga teng.
Tanlangan tanlovlar sizga eng yaxshi marshrutni aniqlash imkonini beradi. Keyingisi:
1 ® 3 ® 2 ® 4 ® 1.

To'g'ridan-to'g'ri Bellman usuli amalga oshiriladigan munosabatlarni yozish uchun biz yangi belgini kiritamiz. M'(V, i) har biri 1-shahardan boshlanib, faqat V kichik to'plamdagi shaharlar orqali oraliq sifatida o'tib, ularning har biriga bir martadan to'liq kirib, i shaharda tugaydigan yo'llar to'plami bo'lsin; bu yerda, avvalgidek, i ixtiyoriy shahar (i N ), V esa N ning 1 va i shaharlarini o‘z ichiga olmagan har qanday kichik to‘plamidir. M'(V, i) to'plamning eng qisqa yo'li uzunligini B*(V, i) bilan belgilang. Ko'rinib turibdiki, V*({2, 3, …, n}, 1) barcha shaharlardan o'tuvchi oddiy (o'z-o'zidan kesishmasdan) yopiq yo'lning istalgan minimal uzunligi. Agar V bir elementli to'plam bo'lsa, V = {j}, bu erda j? 1 va j? i , keyin M'(V, i) to'plami bitta µ = (1, j, i) yo'ldan iborat. Shunday qilib


Faraz qilaylik, barcha i N va barcha mumkin bo‘lgan k-elementlar (k < n - 1) V to‘plamlar uchun V*(V, i) funksiyaning qiymatlari allaqachon hisoblangan bo‘lsin. Keyin qiymat V*(V', i), bu erda V' N {1, i} to'plamning ixtiyoriy (k + 1)-elementli to'plami, formula bo'yicha hisoblanadi.
(1.4)
(1.3)-(1.4) tenglamalar klassik Kommivoyajer masalasini hal qilish uchun dinamik dasturlash rekursiv munosabatlar bo'lib, ular to'g'ridan-to'g'ri Bellman usulini amalga oshirishni ta'minlaydi.
1.2-misol To'g'ridan-to'g'ri hisoblash usulidan foydalanib, matritsa bilan aniqlangan Kommivoyajer masalasini hal qiling:
(esda tutingki, ushbu misoldagi S matritsasi avvalgisi bilan bir xil).
Birinchidan, (1.3) formuladan foydalanib, biz V*( {j }, i) qiymatlarini aniqlaymiz:
B*({2}, 3) = 4 + 5 = 9; B*({3}, 2) = 3 + 2 = 5; B*({4}, 2) = 4 + 5 = 9;
B*({2}, 4) = 4 + 2 = 6; B*({3}, 4) = 3 + 1 = 4; B*({4}, 3) = 4 + 4 = 8.
Bundan tashqari, (1.4) formulaga muvofiq, biz ketma-ket ravishda olamiz (quyida yozilgan har bir tenglikning chap tomonida j parametrining qiymatlari ajratib ko'rsatilgan, bunda (1.4) o'ng tomonida ko'rsatilgan minimal ko'rsatilgan. hisoblash paytida amalga oshiriladi):
B*({2, 3}, 4) = min [B*({2}, 3) + s34; B*({3}, 2) + s24] = min(9 + 1; 5 + 2)= 7;
B*({2, 4}, 3) = min [B*({2}, 4) + s43; B*({4}, 2) + s23] = min(6 + 4; 9 + 5 )= 10;
B*({3, 4}, 2}) = min [B*({3}, 4) + s42; B*({4}, 3) + s32] = min(4 + 5; 8 + 2)= 9;
B*({2, 3, 4}, 1) = min [B*({2, 3}, 4) + s41; B*({2, 4}, 3) + s31; B*({3, 4}, 2) + s21;] = min (7 + 1; 10 +6; 9 + 2 ) = 8.
Demak, ushbu misoldagi mezonning optimal qiymati 8 ga teng.
Tanlangan tanlovlar sizga eng yaxshi marshrutni aniqlash imkonini beradi. Keyingisi:
1 ® 3 ® 2 ® 4 ® 1.


Download 84,94 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish