Informacijos mokslai ISSN 1392-0561 eISSN 1392-1487
2019, vol. 85, pp. 115–134 DOI: https://doi.org/10.15388/Im.2019.85.19
Alfonsas Misevičius
Kauno technologijos
universiteto
Multimedijos inžinerijos katedros tech. m. dr.,
profesorius
Kaunas University of Technology,
Department of
Multimedia Engineering, Dr., Prof.
Studentų g. 50-400/416a, LT-51368
Kaunas
El. paštas alfonsas.misevicius@ktu.lt
Dovilė
Kuznecovaitė (Verenė)
Kauno technologijos
universiteto
Multimedijos inžinerijos katedros doktorantė
Kaunas
University of Technology,
Department of Multimedia Engineering, PhD
Student
Studentų g. 50-408, LT-51368 Kaunas
El. paštas dovile.kuznecovaite@ktu.lt
Santrauka. Šiame straipsnyje nagrinėjamas vadinamasis dviejų lygių iteracinis tabu paieškos (ITP) algoritmas kvadratinio paskirstymo (KP) uždaviniui. Algoritmo naujumas yra tas, jog į jį yra integruotos sprendinių mutavimo procedūros, kurių esminė paskirtis yra diversifikuoti paieškos procesą, išvengiant paieškos stagnacijos ir taip padidinant jos efektyvumą. Algoritmo veikimas išbandytas su įvairių tipų mutavimo procedūrų realizavimo variantais. Atlikti kompiuteriniai eksperimentai su KP uždavinio testavimo duomenų pavyzdžiais iš standartinių pavyzdžių bibliotekos QAPLIB. Pateikti eksperimentų rezultatai, kurie iliustruoja, kaip skirtingos prigimties mutavimo procedūros, esančios ITP sudėtyje, gali įvairiai paveikti algoritmo efektyvumą.
Pagrindiniai žodžiai: skaitmeninis intelektas, kombinatorinis optimizavimas, euristiniai optimizavimo algoritmai, tabu paieška, mutavimo procedūros, kvadratinio paskirstymo uždavinys.
Summary. In this paper, a 2-level iterated tabu search (ITS) algorithm for the solution of the quadratic assignment problem (QAP) is considered. The novelty of the proposed ITS algorithm is that the solution mutation procedures are incorporated within the algorithm, which enable to diversify the search process and eliminate the search stagnation, thus increasing the algorithm’s efficiency. In the computational experiments, the algorithm is examined with various implemented variants of the mutation procedures using the QAP test (sample) instances from the library of the QAP instances – QAPLIB. The results of these experiments demonstrate how the different mutation procedures affect and possibly improve the overall performance of the ITS algorithm.
Keywords: computational intelligence, combinatorial optimization, heuristic algorithms, tabu search, mutation procedures, quadratic assignment problem.
Received: 25/10/2018. Accepted: 14 /2/2019
Copyright © 2018 Alfonsas Misevičius, Dovilė Kuznecovaitė (Verenė). Published by Vilnius University Press. This is an Open Access article distributed under the terms of the Creative Commons Attribution Licence, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.
Kvadratinio
paskirstymo (KP) uždavinys (angl. quadratic assignment problem
(QAP)) matematiškai formuluojamas taip. Duotos dvi neneigiamų
sveikųjų skaičių matricos ir
, taip pat aibė
, kurią sudaro
visi galimi natūrinių skaičių nuo
iki
perstatymai[1]. Tikslas yra surasti perstatymą
ir tokį, jog būtų minimizuota ši funkcija:
. (1)
Dėstymo teorijos
(angl. location theory) kontekste su KP uždaviniu gali būti
modeliuojamas įrengimų išdėstymas į
paskyrimo vietų, turint tikslą
minimizuoti bendrą kainą, atsižvelgiant į įrengimų susietumą ir atstumus
tarp paskyrimo vietų (Koopmans, Beckmann, 1957). Čia matricos
reikšmės
asocijuojamos su įrengimų susietumo svoriais, o matricos
reikšmės nurodo
atstumus tarp paskyrimo vietų.
Dar vienas kvadratinio paskirstymo
uždavinio taikymo pavyzdys – tai elektroninių komponentų išdėstymas
spausdinto montažo plokštės (ar kristalo) pozicijose (Hanan, Kurtzberg,
1972). Šiame kontekste matricos elementai yra elektrinių
sujungimų tarp komponentų porų kiekiai. Matricos
elementai atitinka atstumus
tarp fiksuotų pozicijų montažinėje plokštėje (kristale). Tuomet perstatymas
gali būti interpretuojamas kaip atskira komponentų išdėstymo pozicijose
konfigūracija. Perstatymo elementas
šiuo atveju nurodo numerį
pozicijos, į kurią paskirtas i-tasis komponentas. Tokiu būdu
(tiksliau,
) gali būti suprantamas kaip bendras sujungimų tarp komponentų
ilgis, kuomet visi
komponentai yra išdėstyti
atitinkamose
pozicijų. (Literatūroje galima rasti ir dar daugiau KP
uždavinio praktinio taikymo pavyzdžių aprašymų (Çela, 1998).)
Kita
vertus, KP uždavinys yra matematinis uždavinys, t. y. kombinatorinio
optimizavimo uždavinys. Šiuo atveju tikslas yra surasti optimalų sprendinį,
kur sprendiniai yra išreiškiami natūrinių skaičių perstatymais. Optimalumo
kriterijus aprašomas (1) formule, o funkcija yra vadinama tikslo funkcija
(TF).
Įrodyta, jog KP uždavinys priklauso NP sunkių optimizavimo
uždavinių klasei (Sahni, Gonzalez, 1976). Tai reiškia, kad skaičiavimų
laikas, reikalingas optimumui pasiekti, yra susietas su uždavinio apimtimi
eksponentine priklausomybe. Dėl šios priežasties KP uždavinio sprendimui
naudojami euristiniai optimizavimo algoritmai (Michalewicz, Fogel, 2000;
Yang, 2010; Edelkamp, Schrödl, 2012; Siarry, 2016). Nors šie algoritmai
negarantuoja optimalaus sprendinio suradimo, tačiau jie leidžia gauti
pakankamai aukštos kokybės (artimus optimaliems) sprendinius per priimtiną
skaičiavimų laiką. KP uždaviniui sėkmingai išbandyti šie euristiniai
algoritmai: atkaitinimo modeliavimas (angl. simulated annealing)
(Misevičius, 2003), genetiniai algoritmai (angl. genetic algorithms)
(Merz, Freisleben, 2000; Drezner, 2003; Misevicius, 2004; Tang ir kt., 2006;
Ahmed, 2015; Benlic, Hao, 2015; Chmiel, Kwiecień, 2018), tabu paieška (angl.
tabu search) (Taillard, 1991; Misevicius, 2005; Shylo, 2017),
godžiosios randomizuotos adaptyvios paieškos procedūros (angl. greedy
randomized adaptive search procedures (GRASP)) (Li ir kt., 1994),
iteratyvioji lokalioji paieška (angl. iterated local search)
(Stützle, 2006), skruzdėlių kolonijų (Gambardella ir kt., 1999), bičių
spiečių (Dokeroglu ir kt., 2019) imitavimo algoritmai (angl. artificial
bee colony, ant colony optimization) ir kt. (Benlic, Hao, 2013;
Hafiz, Abdennour, 2016; Aksan ir kt., 2017; Abdel-Basset ir kt., 2018;
Chmiel, 2019). Nepaisant pasiektų daug žadančių rezultatų, euristinių
algoritmų KP uždaviniui tolesnio išvystymo ir tobulinimo klausimai vis dar
išlieka aktuali mokslinių tyrinėjimų tema.
Šiame straipsnyje aprašomas patobulintas tabu paieškos (TP) algoritmas – vadinamasis dviejų lygių iteracinis tabu paieškos (ITP) algoritmas. Algoritmo veikimo principo naujoviškumas yra tas, kad tabu paieškos procedūra yra vykdoma iteraciniu būdu, pradedant vis nuo naujo sprendinio (pereinant tarp skirtingų lokaliai optimalių sprendinių). Iteracinį tabu paieškos algoritmą sudaro šie pagrindiniai komponentai: tabu paieškos procedūra, sprendinio-kandidato parinkimas, parinkto sprendinio mutavimas. TP procedūra atliekama kuo greičiau, panaudojant nedidelį iteracijų skaičių. Gautas TP procedūros sprendinys po to yra perturbuojamas mutavimo procedūroje tam, kad būtų diversifikuotas paieškos procesas, taip bandant išvengti paieškos stagnacijos, kas yra viena pagrindinių kliūčių vykdant standartinę, neiteracinę TP. Siekiant nustatyti galimą efektyviausią ITP modifikaciją, buvo tirta daugiau nei 10 mutavimo proceso realizavimo variantų.
Straipsnio struktūra yra tokia. Iš pradžių pateikiamos bazinės formuluotės. Po to aprašomas dviejų lygių iteracinis tabu paieškos algoritmas ir į jį integruotos sprendinių mutavimo procedūros. Taip pat pateikiami kompiuterinių-eksperimentinių tyrimų rezultatai, gauti išbandžius įvairius mutavimo procedūrų algoritminio realizavimo variantus. Straipsnis baigiamas apibendrinamosiomis pastabomis.
Pradžioje pateikiame bazines formuluotes (apibrėžimus).
1. Tarkime, kad (
) ir
(
,
) yra du
perstatymo (sprendinio)
elementai, kurie vykdant
algoritmą gali būti sukeisti vietomis. Tuomet
apibrėšime taip:
.
(2)
Tai reiškia, kad perstatymas gaunamas iš perstatymo
, tame
perstatyme sukeičiant elementus
ir
vietomis. Galima pastebėti,
kad galioja tokios lygybės:
,
,
. Taip pat bet kokiems
tarpusavyje skirtingiems
galioja
,
.
2. Tikslo
funkcijos () pokytis (
), sukeitus
sprendinio-perstatymo elementus
ir
vietomis, apskaičiuojamas
pagal šią bendrą formulę:
.
(3)
Tikslo funkcijos pokytį dviem „perstatymams-kaimynams“ ir
, kai
,
galima apskaičiuoti ir žymiai greičiau – su sąlyga, jog yra įsimintos
(išsaugotos) visos ankstesnių pokyčių reikšmės
(
). Pokyčiams saugoti pakanka
dvimatės matricos, o pokyčio reikšmė gaunama, panaudojant
operacijų
(Taillard, 1991). Atlikus elementų
ir
sukeitimą, naujos pokyčių
reikšmės
(
,
,
,
) apskaičiuojamos pagal šią formulę:
+
. (4)
Pastaba. Jeigu
arba
arba
arba
, tai turi būti
taikoma (3) formulė. Nors pastarosios formulės sudėtingumas yra
, tačiau
ji taikoma tik keturioms indeksų poroms, o tai įgalina visas pokyčių
reikšmes apskaičiuoti panaudojant tik
operacijų. Išimtį sudaro
inicializacijos fazė, t. y. pirmoji pokyčių apskaičiavimo iteracija, kurios
metu reikia (bet tik vieną kartą) atlikti
operacijų.
Jeigu
matrica ir / arba matrica
yra simetrinė(s), tai (3)
formulė supaprastėja. Sakykime, kad matrica
yra simetrinė. Tuomet galima
transformuoti (asimetrinę) matricą
į simetrinę matricą
; tam
pakanka sudėti atitinkamus matricos
elementus. Taip gauname
žemiau pateikiamą formulę:
; (5)
čia ,
,
,
.
Analogiškai (4) formulė virsta tokia formule:
. (6)
Jeigu i = u(v) arba j = u(v), tai turi būti taikoma (5) formulė.
Disponuojant pakankamos apimties
kompiuterine atmintimi, galima vietoje dvimačių matricų ir
panaudoti
atitinkamas trimates matricas
ir
. Tarkime, kad
,
o
, čia
,
,
. Tuomet tikslo funkcijos
pokyčius galime apskaičiuoti panaudodami labai kompaktiškas
formules:
, (7)
+
. (8)
Matricoms ir
suformuoti panaudojama
operacijų; tas atliekama dar
prieš pradedant vykdyti algoritmą. Taigi, tai neturi kiek nors žymesnės
įtakos bendram algoritmo sudėtingumui; atvirkščiai, atlikti praktiniai
eksperimentai patvirtino išankstinę prielaidą, jog galima sutaupyti iki 20
proc. procesorinio laiko. (Aišku, kompiuterinės atminties sunaudojimas
išauga: matricų
,
saugojimui reikia
atminties.)
3. Atstumas
(vadinamasis Hemingo atstumas) tarp dviejų perstatymų ir
apibrėžiamas kaip
.
Galioja tokios lygybės:
,
,
,
,
. Pastebėsime, jog bet kuriems
(
,
,
)
.
Apskritai, jei turime
skirtingų
, tai yra teisinga
ši lygybė:
.
4. Sprendinio-perstatymo aplinka (porinių sukeitimų
aplinka)
apibrėžiama pagal formulę:
. Kitaip tariant, aplinką
sudaro sprendiniai:
,
, …,
,
, …,
, …,
,
,
…,
, …,
. Tokiu būdu aplinkos
dydis
yra lygus
. Tiek žingsnių reikia atlikti norint visiškai išnagrinėti
esamo sprendinio
aplinką
. Taigi, šiai aplinkai
išnagrinėti pakanka
operacijų. Gali būti
apibrėžiamos ir kitokios aplinkos (bendruoju atveju sprendinio
aplinką
žymėsime
). Sprendinių aplinkų visuma sudaro sprendinių paieškos aibę
(sprendinių paieškos erdvę).
5. Sprendinys vadinamas lokaliai optimaliu
sprendiniu aplinkos
atžvilgiu, jeigu kiekvienam
sprendiniui
iš aplinkos
galioja
(kitaip tariant,
sprendinio
aplinkoje
nėra nė vieno geresnio
sprendinio už
).
6. Mutavimo (angl. mutation) procesas
sprendinių-perstatymų atveju gali būti apibrėžiamas panaudojant formalų
operatorių :
. Taigi, jeigu
, tai
; be to,
. Galima
naudoti ir labiau formalizuotą operatorių
:
, kuris esamą sprendinį
transformuoja į naują sprendinį
ir tokį, jog
. Skaitytojas
galėtų įsitikinti, kad bet kuriam mutuotam sprendiniui-perstatymui
egzistuoja skaičių seka
ir tokia, jog
. Dydį
(parametrą)
vadinsime mutavimo laipsniu (stiprumu). Akivaizdu, jog 2
. Taigi,
po mutavimo pakinta
procentų sprendinio elementų.
Parametras
yra iš esmės vienintelis kiekybinis mutavimo procesą
reguliuojantis veiksnys. Kuo didesnė
reikšmė, tuo daugiau
sprendinio elementų sukeičiama (tuo didesniu mastu pakinta sprendinys, tuo
labiau mutuotas sprendinys „nutolsta“ nuo esamo sprendinio) ir atvirkščiai.
Galima šiuo atveju manyti, kad mutavimo operatorius
transformuoja
esamą sprendinį
į kitą sprendinį, priklausantį sprendinio
aplinkai
. Dar
sakoma, jog atliekamas perėjimas (
perėjimas) iš sprendinio
į
sprendinį
(sprendinio
pakeitimas sprendiniu
).
Atskiras mutavimo operatoriaus atvejis yra dviejų perstatymo elementų
sukeitimo operatorius
:
, kuris sukeičia perstatymo
u-tąjį ir v-tąjį elementus vietomis, t. y.
. Daugelis
euristinių algoritmų KP uždaviniui remiasi būtent šio operatoriaus ir
aplinkos
, kaip nereikalaujančios didelio skaičiavimų kiekio,
panaudojimu.
Grįždami prie mutavimo, pastebėsime, jog mutavimas kartu su kryžminimu yra pagrindiniai evoliucinių (genetinių) algoritmų operatoriai. Trumpai sakant, mutavimui savybingas grynai atsitiktinis pobūdis, mutavimo procesas savo prigimtimi yra indeterminuotas procesas. Tuo mutavimas iš esmės skiriasi nuo kryžminimo procedūrų. Mutavimo proceso metu generuojamos, apskritai kalbant, naujos sprendinių savybės, nauja informacija; o kryžminimo procedūros paprastai tik (re)kombinuoja informaciją, esančią pirmtakuose. Skirtingai negu standartinėse kryžminimo procedūrose, kur yra paveldimas sukauptas genetinis kodas iš dviejų pirmtakų ir daugiau niekur kitur, mutavimo procedūrose pagrindinis dalykas yra ne informacijos perdavimas, o kitos, naujos informacijos įnešimas, informacijos, kurios prieš tai dar nebuvo, sukūrimas. Šiuo požiūriu mutavimo procesas yra labiau kaip potencialaus naujumo generavimo procesas, kaip labiau kuriantysis, užuomazginis procesas, palyginti su kryžminimu. Be to, mutavimui nebūtina sprendinių populiacija, pakanka tik vieno sprendinio.
Skirtingai nuo tradicinių lokaliosios paieškos algoritmų, kurie apsiriboja vieno lokaliai optimalaus sprendinio suradimu, TP algoritmai tęsia paiešką ir tuo atveju, kai gauto sprendinio aplinkoje nebeegzistuoja geresnių sprendinių-kaimynų. Esminė TP idėja yra ta, jog yra (laikinai) uždraudžiama grįžti į tuos pačius, neseniai nagrinėtus sprendinius tam, kad būtų išvengta paieškos ciklinimosi, t. y. kartojimo nuo to paties išeities „taško“ (Glover, Laguna, 1997). Tam tikrais periodais atskiri sprendiniai yra uždraudžiami („įšaldomi“), skelbiami „tabu“. Laikinų draudimų strategija leidžia „neįstrigti“ lokaliųjų optimumų zonose ir suteikia galimybes po laikinų TF pablogėjimų tęsti paiešką naujose sprendinių erdvės srityse. Taip galima pereiti nuo vieno lokaliai optimalaus sprendinio prie kito, tikėtina, geresnio; tai kartojant daug kartų, žymiai išauga tikimybė surasti aukštesnės kokybės sprendinius.
Vykstant TP
procesui analizuojama esamojo sprendinio aplinka (mūsų atveju —
) ir
atliekamas tas nedraudžiamas perėjimas, kuris labiausiai pagerina (sumažina)
tikslo funkcijos
reikšmę. Jeigu nėra pagerinančių perėjimų, tai pasirenkamas
tas, kuris mažiausiai pablogina TF reikšmę. Tam, kad būtų eliminuoti
paieškos ciklai, atvirkštinis perėjimas, taip pat grįžimas į kitus neseniai
aplankytus sprendinius turi būti uždraudžiamas apibrėžtam laikotarpiui.
Draudimai saugomi tabu atmintyje, t. y. sąraše
, įsimenant paskutinius
nagrinėtus sprendinius. Mūsų atveju tabu sąrašas
realizuotas kaip dvimatė
dydžio
matrica. Šiuo atveju matricos elementas
saugo esamos iteracijos
numerį ir uždraudimo periodą (angl. tabu tenure)
; tokiu būdu ši
reikšmė nurodo, nuo kurios iteracijos vėl galima sukeisti perstatymo
i-tąjį ir j-tąjį narius. Parametro
reikšmė mūsų ITP algoritme yra
prilyginta
. Elementų
,
sukeitimas (perėjimas į
sprendinį
) yra negalimas, jeigu reikšmė
yra didesnė negu esamas
paieškos iteracijos numeris. Draudimas yra anuliuojamas atsitiktiniais
momentais su labai maža tikimybe
(
). (Tai leidžia truputį
padidinti nedraudžiamų sprendinių kiekį ir ne taip apriboti galimas paieškos
kryptis.) Draudimas taip pat yra ignoruojamas, kai patenkinama aspiracijos
sąlyga (angl. aspiration criterion), t. y. po sukeitimo gaunamas
sprendinys, kuris yra geresnis už iki šiol atliekant tabu paieškos procedūrą
rastą geriausią sprendinį. Tabu sąrašas yra dinamiškai atnaujinamas vykdant
algoritmą (kai tik esamas sprendinys pakeičiamas nauju).
Kartu su tabu
sąrašu mūsų tabu paieškos procedūra dar naudoja papildomą atmintį (antrinę
atmintį-archyvą (angl. secondary memory)) (Dell’amico, Trubian,
1998). Šios atminties paskirtis yra išsaugoti aukštos kokybės sprendinius,
kurie nors ir buvo įvertinti kaip labai geri, bet nebuvo pasirinkti.
Konkrečiai sakant, į antrinę atmintį kiekvienos iteracijos metu įtraukiami
sprendiniai, likę „antri“ po aplinkos
patikrinimo. Jeigu vykdant
tabu paieškos procedūrą geriausias rastas sprendinys nesikeičia daugiau kaip
iteracijų, tai tabu sąrašas išvalomas ir paieška paleidžiama, pradedant nuo
vieno iš „antrųjų“ sprendinių iš antrinės atminties
(čia
yra
nustatytas TP procedūros vykdymo iteracijų skaičius, o
– parinktas
tuščios eigos limito koeficientas, toks, jog
). Reikia pastebėti, jog
archyve išsaugomos ir visos tikslo funkcijos pokyčių reikšmės (
), tai
padidina atminties sąnaudas, bet skaičiavimų laikui tai labai didelės įtakos
nedaro. TP algoritmo sudėtingumas išlieka proporcingas
, o tokio archyvo
panaudojimas, kaip rodo eksperimentų rezultatai, prisideda prie to, jog
efektyvumas padidėja dėl to, jog sumažinamas neigiamas paieškos stagnacijos
poveikis. Antrinė atmintis išvaloma, pasibaigus TP procedūrai.
TP
procesas yra baigiamas, kai tik atliekamas iš anksto pasirinktas TP vykdymo
iteracijų skaičius (). TP algoritmo detalizuotas
formalus aprašymas pateiktas 1 pav.
procedure Tabu_Paieška; // tabu paieškos algoritmas KP uždaviniui
// duomenys: p - esamas sprendinys-perstatymas (kartu su atitinkamais tikslo funkcijos reikšmių pokyčiais (Δ)),
// n - uždavinio dydis (perstatymo dydis)
// rezultatai: p• - geriausias rastas sprendinys (kartu su TF reikšmių pokyčiais)
// valdymo parametrai: τ - tabu paieškos vykdymo iteracijų skaičius, h - uždraudimo (tabu) periodas,
// α - tabu paieškos randomizavimo koeficientas, β - tuščios eigos limito koeficientas
begin
p• := p; k := 1; k′ := 1; archyvo_skaitiklis := 0; L := ; // L - tuščios eigos
limitas
while (k ≤ τ) begin // pagrindinis tabu paieškos iteracijų vykdymo ciklas
delta′min := ∞; delta′′min := ∞; u′ := 1; v′ := 2;
// nagrinėjama sprendinio p aplinka Θ2(p) ir ieškomas geriausias sprendinys, kuris nėra uždraustas (tabu)
for i := 1 to n - 1 do
for j := i + 1 to n do begin
delta := Δ (pi, j, p);
tabu := iif((tij ≥ k) and (random() ≥ α), TRUE, FALSE); aspiracija := iif(z(p) + delta < z(p•), TRUE, FALSE);
if ((delta < delta′min) and (tabu = FALSE)) or (aspiracija = TRUE) then begin
if delta < delta′min then begin
delta′′min := delta′min; u′′ := u′; v′′ := v′; delta′min := delta; u′ := i; v′ := j endif
else if delta < delta′′min then begin delta′′min := delta; u′′ := i; v′′ := j endif
endif
endfor;
if delta′′min < ∞ then begin // „antrojo“ sprendinio įtraukimas į archyvą (antrinę atmintį) G
archyvo_skaitiklis := archyvo_skaitiklis + 1; Γ [archyvo_skaitiklis] ← p, Δ, u′′, v′′ endif;
if delta′min < ∞ then begin
; // esamas sprendinys
pakeičiamas nauju sprendiniu
perskaičiuoti tikslo funkcijos pokyčius
, i, j = 1, ..., n;
if z(p) < z(p•) then begin p• := p; k′ := k endif; // išsaugomas geriausias rastas sprendinys
// elementų
p(u′), p(v′)
sukeitimas uždraudžiamas būsimoms h iteracijų
endif;
if (k - k′ > L) and (k <τ - L) then begin // tabu paieškos paleidimas, panaudojant sprendinį iš archyvo
išvalyti tabu sąrašą T;
atsitiktinio_išrinkimo_indeksas := random(archyvo_skaitiklis * 0.8, archyvo_skaitiklis);
p, Δ, u′′, v′′ ← Γ[atsitiktinio_išrinkimo_indeksas];
:=
; perskaičiuoti tikslo funkcijos pokyčius
, i, j = 1, ..., n;
; k′ := k
endif;
k := k + 1
endwhile;
išvalyti tabu sąrašą T
end.
Pastabos. 1. Tiesioginio vykdymo „if“ funkcija iif(x, y1, y2) grąžina y1, jeigu x = TRUE, kitu atveju grąžinama y2. 2. Funkcija random() generuoja (pseudo)atsitiktinį realųjį skaičių, patenkantį į intervalą [0, 1]. 3. Funkcija random(x1, x2) generuoja (pseudo)atsitiktinį sveikąjį skaičių iš intervalo [x1, x2].
1 pav. Tabu paieškos algoritmo aprašymas
Tabu paieškos algoritmo panaudojimas dar neužtikrina aukštos surastų sprendinių kokybės dėl jau minėto paieškos stagnacijos efekto pasireiškimo. Vienas iš būdų sumažinti paieškos stagnavimo poveikį yra išplėsti standartinį TP algoritmą taip, kad jis būtų vykdomas ne vieną, bet keletą kartų. Taip gaunama iteratyvioji tabu paieška (ITP) (angl. iterated tabu search), kurios veikimo principo pagrindas yra daugkartinis TP algoritmo panaudojimas, iteratyviu būdu vykdant TP kartotinį procesą ir kombinuojant tabu paiešką su papildomomis sprendinių pertvarkymo, t. y. mutavimo, procedūromis[2]. Iteratyviajai tabu paieškai, savo ruožtu, taip pat gali būti taikomas daugkartinis panaudojimas; taip gaunamas 2 lygių iteratyviosios tabu paieškos algoritmas – savotiškas hierarchinis iteratyviosios tabu paieškos algoritmas. Tokio tipo algoritmo skiriamoji savybė yra ta, jog jis pasižymi savo struktūros hierarchiškumu, tiksliau, panašumumu į save (angl. self-similarity). Panašumas į save, kaip žinoma, yra turbūt vienas iš fundamentaliausių gamtos principų. Mūsų atveju dviejų lygių ITP algoritmą sudaro du panašūs į save struktūriniai lygiai. Aukštesniojo (2-ojo) lygmens algoritmas kreipiasi į žemesniojo (1-ojo) lygio algoritmą, kuris jau betarpiškai naudoja TP algoritmą. Šiuo atveju TP procedūra, galima įsivaizduoti, yra savotiškas iteracinio algoritmo „branduolys“. Būtent ši ir tik ši procedūra vykdo betarpišką sprendinio pagerinimą (atlieka paieškos intensifikavimą).
Du lygiai yra iš esmės tos pačios struktūros. Esamo lygio algoritmą sudaro trys esminiai komponentai: 1) žemesnio lygio algoritmo panaudojimas (iškvietimas); 2) sprendinio-kandidato parinkimas mutavimui; 3) atrinkto sprendinio mutavimas. Nors atskirų lygių struktūra yra išties paprasta, tačiau šių lygių tinkamas sujungimas leidžia žymiai padidinti paieškos efektyvumą. Aišku, paieškos laikas išauga, bet tai yra kompensuojama aukštesne rezultatų kokybe. Atkreiptinas dėmesys į tai, kad sprendinio mutavimas yra labai svarbus komponentas ITP algoritme ir jis yra reikalingas tam, kad būtų galima pereiti į kitas, nenagrinėtas sprendinių aibės (paieškos erdvės) sritis ir išvengti paieškos stagnacijos. Matyti, jog sprendinio mutavimas vykdomas kiekviename lygyje – skirtingai nuo „branduolio“ procedūros (TP procedūros), kuri atliekama tik žemiausiame lygyje. Taigi, iteracinio algoritmo atveju dominuoja paieškos diversifikavimo faktorius, o tai ir yra labai svarbu, vykdant paiešką didžiulėje sprendinių erdvėje su daug lokaliai optimalių sprendinių. Kas dėl sprendinio-kandidato parinkimo mutavimui, tai visada imamas paskutinis gautas (vis kitas) pagerintas sprendinys. Toks parinkimas leidžia išžvalgyti galimai didesnę sprendinių erdvės dalį.
Vieno ir dviejų lygių ITP algoritmų detalizuoti formalūs aprašymai pateikti 2 ir 3 pav.
procedure 1-Lygio_Iteracinė_Tabu_Paieška; // vieno lygio iteracinės tabu paieškos algoritmas KP uždaviniui
// duomenys: p - esamas sprendinys-perstatymas
// rezultatai: pÑ - geriausias rastas sprendinys-perstatymas (kartu su tikslo funkcijos reikšmių pokyčiais (Δ))
// valdymo parametras: Q1 - 1 lygio tabu paieškos vykdymo iteracijų skaičius
begin
pÑ := p;
for q1 := 1 to Q1 do begin
vykdyti procedūrą Tabu_Paieška sprendiniui p, gauti (pagerintą) sprendinį p•;
if z(p•) < z(pÑ) pÑ := p•; // įsimenamas geriausias rastas sprendinys (kartu su TF pokyčiais)
if q1 < Q1 then begin
p := Sprendinio_Kandidato_Parinkimas_Mutavimui(p·, pÑ);
vykdyti mutavimo procedūrą sprendiniui p, grąžinti mutuotą sprendinį p~;
p := p~
endif
endfor
end.
2 pav. Vieno lygio iteracinės tabu paieškos algoritmo aprašymas
procedure 2-jų_Lygių_Iteracinė_Tabu_Paieška; // dviejų lygių iteracinės tabu paieškos algoritmas KP uždaviniui
// duomenys: p° - pradinis sprendinys-perstatymas
// rezultatai: pÑÑ - geriausias rastas sprendinys-perstatymas
// valdymo parametras: Q2 - 2 lygio tabu paieškos vykdymo iteracijų skaičius
begin
generuoti atsitiktiniu būdu pradinį sprendinį-perstatymą p°;
apskaičiuoti tikslo funkcijos pokyčius
, i, j = 1, ..., n;
inicializuoti tabu sąrašą T;
p := p°; pÑÑ := p°;
for q2 := 1 to Q2 do begin
vykdyti procedūrą 1-Lygio_Iteracinė_Tabu_Paieška sprendiniui p, gauti (pagerintą) sprendinį pÑ;
if z(pÑ) < z(pÑÑ) pÑÑ := pÑ; // įsimenamas geriausias rastas sprendinys
if q2 < Q2 then begin
p := Sprendinio_Kandidato_Parinkimas_Mutavimui(pÑ, pÑÑ);
vykdyti mutavimo procedūrą sprendiniui p, grąžinti mutuotą sprendinį p~;
p := p~
endif
endfor
end.
3 pav. Dviejų lygių iteracinės tabu paieškos algoritmo aprašymas
Mutavimo proceso
bazinių variantų algoritminis realizavimas nėra labai sudėtingas. Teorinis
pagrindas yra mutavimo operatorius , formaliai aprašytas sk.
„Bazinės formuluotės“. Atsižvelgiant į mutavimo algoritminio realizavimo
skirtumus (ypatumus), galima sudaryti įvairių tipų mutavimo
procedūras.
Toliau trumpai aprašomos mūsų sudarytos ir tyrime naudotos mutavimo procedūros.
Ši mutavimo procedūra yra labai nesudėtinga (žr.
4 pav.). Sukuriamas sprendinio-perstatymo klonas
. Perstatyme
atsitiktinai parenkamos pozicijos
,
, sugeneruojant du skirtingus
(pseudo)atsitiktinius sveikuosius skaičius iš intervalo
pagal tolygiojo
pasiskirstymo dėsnį. (Kad būtų išvengta pasikartojančių atsitiktinių skaičių
generavimo, yra iš anksto sugeneruojamas perstatymas
, sudarytas iš
atsitiktinai sumaišytų sveikųjų skaičių nuo
iki
. Skaičių poros
tokiu būdu nurodo
perstatymo
atsitiktinių pozicijų indeksų poras.) Pradedama nuo poros
, ir
perstatymo
elementai, esantys šiose pozicijose, sukeičiami (iš
pereinama į
). Po to imama pora
ir t. t. Tai kartojama
skaičių
kartų; čia
– algoritmo tyrėjo / vartotojo iš anksto nustatyta (norima)
mutavimo laipsnio reikšmė. Mutavimo procedūros rezultatas – mutuotas
sprendinys
, tenkinantis sąlygą
. Aišku, kad formuojant
mutuotą sprendinį-perstatymą yra užtikrinamas reikalavimas, jog gautame
sprendinyje-perstatyme jokie elementai nesikartoja, t. y.,
. Mutavimo proceso
stiprumas kontroliuojamas panaudojant parametrą
(teoriškai 2
).
Remiantis šiuo mutavimo algoritmo principu galima sudaryti ir daug įvairių kitų modifikuotų mutavimo procedūrų.
4 pav. Mutavimo
procedūros pavyzdžio iliustracija (n = 9, m = 5)
(Šiame pavyzdyje
mutavimo procesas yra toks: elementas 3 keičiamas su elementu 4 (elementas 3
patenka į 3-iąją poziciją); 3 (esantis 3-iojoje pozicijoje) keičiamas su 1;
3 (esantis 4-ojoje pozicijoje) keičiamas su 8; 3 (esantis 6-ojoje
pozicijoje) keičiamas su 5 (3 patenka į 8-ąją
poziciją))
Mutavimo procedūrą šiuo atveju sudaro
du žingsniai: 1) atsitiktiniai poriniai elementų sukeitimai; 2) sukeistų
elementų išmaišymas, panaudojant atsitiktinį raktą. Atsitiktinis raktas yra
papildomas atsitiktinių indeksų nuo iki
masyvas (rinkinys
).
Atsitiktinio rakto reikšmės nurodo, kokie anksčiau sukeisti elementai su
kokiais elementais maišomi. Taip bandoma gauti „giliau“ mutuotą sprendinį,
daugiau randomizuotą elementų išmaišymą. Tuomet vykstant TP procesui ne taip
paprasta grįžti į ankstesnę situaciją, tik atliekant porinius elementų
sukeitimus.
Šioje mutavimo procedūroje sprendinio klone
atsitiktinai parenkama pozicija, tarkime,
. Tuomet sprendinio
esama
elemento reikšmė
pakeičiama tokia priešine (opozicine) (angl.
opposition) reikšme:
, čia
žymi liekanos
gavimo operaciją. Po šio sukeitimo taip pat turi būti pakeistas sprendinio
elementas, kuris prieš tai buvo lygus
. Po abiejų sukeitimų
tampa
lygus
,
– lygus
,
rodo sprendinio
elemento
reikšmės, kuri buvo lygi
,
indeksą.
Duotoje procedūroje sukeičiamų sprendinio elementų pozicijų
indeksai generuojami taip, jog atstumas () tarp tų pozicijų būtų galimai
didesnis. Panaudota tokia sukeičiamų sprendinio elementų indeksų reikšmių
generavimo formulė:
, čia
,
–
(pseudo)atsitiktinis realusis skaičius iš intervalo
,
,
; pradinė
reikšmė
(
)
– tai atsitiktinis sveikasis skaičius iš intervalo
. Tokiu būdu yra
sugeneruojama
atsitiktinių indeksų reikšmių (priminsime, kad
yra mutavimo
laipsnis). Šiuo atveju rekomenduojama, kad
neviršytų
.
Ši procedūra panaši į
atsitiktinių porinių elementų sukeitimų mutavimo procedūrą. Generuojamas
atsitiktinių realiųjų skaičių iš intervalo rinkinys (angl. real-coded
values). Sugeneruoti skaičiai (kartu su juos atitinkančiais teigiamais
indeksais (angl. smallest positive values)) išrikiuojami didėjimo
tvarka. Išrikiuotus atsitiktinius skaičius atitinkantys išmaišyti indeksai
ir nurodo, kurias sprendinio
elementų poras reikia sukeisti
(žr. sk. „Atsitiktiniai poriniai elementų
sukeitimai“).
Duota procedūra yra irgi panaši
į procedūrą, aprašytą sk. „Atsitiktiniai poriniai elementų sukeitimai“.
Procedūros tikslas – nuosekliai, vienas po kito generuojant atsitiktinius
sveikuosius skaičius iš intervalo , iš karto gauti sprendinio
sukeičiamų elementų porų indeksus. Tačiau, kaip pastebėta, atsitiktiniai
sveikieji skaičiai gali dubliuotis. Tam, kad nebūtų dubliavimosi,
sugeneruoti atsitiktiniai sveikieji skaičiai surikiuojami (žr. sk.
„Modifikuotas atsitiktinių elementų sukeitimų mutavimas - I“). Surikiuotus
skaičius atitinkantys indeksai nurodo reikalingus sumaišyti
elementus.
Kombinuoto mutavimo procedūroje yra nuosekliai sujungtos dvi mutavimo procedūros. Iš pradžių nustatomi atsitiktiniai perstatymo elementų indeksai, kaip aprašyta sk. „Modifikuotas atsitiktinių elementų sukeitimų mutavimas - II“. Po to nustatyti elementai yra mutuojami, panaudojant priešines reikšmes (žr. sk. „Mutavimas panaudojant priešines (opozicines) reikšmes“).
Šiuo atveju iš pradžių vykdomi atsitiktiniai poriniai elementų sukeitimai (kaip aprašyta sk. „Atsitiktiniai poriniai elementų sukeitimai“). Po to atliekama randomizuota lokalioji paieška, t. y. nuosekliai nagrinėjamos atsitiktinai parinktos sprendinio elementų poros, bet elementų sukeitimai atliekami tik tuo atveju, jeigu po sukeitimo gaunamas geresnis sprendinys (tikslo funkcijos reikšmė sumažėja). Ši ir kitos toliau aprašomos mutavimo procedūros jau nėra tokios universalios (nepriklausančios nuo sprendžiamo uždavinio), kaip anksčiau aprašytos, nes turi būti įvertinama ir tikslo funkcija bei specifinės konkretaus sprendžiamo uždavinio savybės.
Šioje procedūroje iš pradžių taip pat vykdomi atsitiktiniai elementų sukeitimai. Po to atliekama dalinė randomizuota lokalioji paieška. Šiuo atveju visiškai išnagrinėjama atsitiktiniu būdu sukonstruota, nedidelės apimties sprendinių aplinka. Vykdant paiešką šioje aplinkoje, vėlgi atliekami tik tie perėjimai tarp sprendinių, kurie pagerina tikslo funkcijos reikšmę.
Šios mutavimo procedūros principas yra kiek kitoks negu
prieš tai nagrinėtų. Ypatumas yra tas, jog iš pradžių sprendinys savotiškai
„dezintegruojamas“, po to rekonstruojamas. Sprendinio dezintegravimas
reiškia, jog yra anuliuojama (pašalinama) dalis atsitiktinai parinktų
sprendinio elementų, sprendinys tampa dalinis, po to bandoma dalinį
sprendinį rekonstruoti į pilnąjį sprendinį ir taip, kad gautas sprendinys
būtų su kuo mažesne tikslo funkcijos reikšme. Taigi, mutavimą sudaro dvi
fazės: 1) sprendinio dezintegravimas, kuris yra atsitiktinis; 2) sprendinio
rekonstravimas, kuris yra determinuotas (nes siekiama minimizuoti tikslo
funkciją). Mūsų procedūroje pirmos fazės metu yra anuliuojama elementų, t. y.
tiek, koks yra mutavimo laipsnis. Antroje fazėje taikomas godusis
konstravimo algoritmas. Šis algoritmas iš visų galimų
variantų atrenka
tą, kuriam apskaičiuotas tikslo funkcijos įvertinimas (tam tikra tikslo
funkcijos ribos reikšmė) yra minimalus. Mutavimo laipsnio
dydis yra
apribotas (
,
), kad labai neišaugtų mutavimo procedūros atlikimo
laikas.
Ši mutavimo procedūra primena prieš tai aprašytąją. Skirtumas yra tas, jog dalinio sprendinio rekonstravimo fazėje yra naudojamas godžios randomizuotos adaptyvios paieškos algoritmas (angl. greedy randomized adaptive search procedure – GRASP) (Li ir kt., 1994), norint gauti pagerintą sprendinį.
Šiuo atveju atliekant mutavimo procedūrą yra
tiesiog pertvarkytas tabu paieškos algoritmas, kuriame atliekami tik
perėjimai tarp „antrųjų“ sprendinių. Atliekamas ribotas TP vykdymo iteracijų
skaičius ( iteracijų). Taigi, mutavimas tampa ne tiek atsitiktinis, kiek
godus (kvazideterminuotas).
Pastebėtina, kad, atliekant visas mutavimo
procedūras, pasikeičia sprendinio TF reikšmė, taigi yra labai svarbu
efektyviai perskaičiuoti TF reikšmių pokyčius. Kaip žinoma, TF pokyčiai,
sukeitus du elementus, apskaičiuojami panaudojant operacijų. Kadangi visos
aprašytos mutavimo procedūros atlieka apytikriai
ar panašų (proporcingą)
skaičių elementų sukeitimų, tai visų mūsų mutavimo procedūrų sudėtingumas
yra proporcingas
.
Mutavimo laipsnis atlieka svarbų vaidmenį
mutavimo procedūroje, o kartu ir ją naudojančiame iteraciniame tabu paieškos
algoritme. Turi būti pasirenkamas tam tikras kompromisinis variantas tarp
dviejų ekstremalių situacijų: 1) reikšmė
yra (labai) maža; 2) reikšmė
yra
(labai) didelė (pvz., artima
). Pirmuoju atveju mutavimas
negarantuotų pakankamai „nutolusio“ (nuo duotojo) sprendinio generavimo, o
tai lemtų grįžimą atgal į ankstesnįjį lokalųjį optimumą po tabu paieškos
etapo. Antruoju atveju paieška taptų labai panaši į daugkartinę paiešką,
startuojant kiekvieną kartą tiesiog nuo atsitiktinių sprendinių ir
prarandant paieškos metu lokaliai optimaliuose sprendiniuose sukauptą
naudingą informaciją.
Buvo atlikti praktiniai kompiuteriniai-eksperimentiniai tyrimai, kurių tikslas – pademonstruoti aprašyto ITP algoritmo tinkamumą ir nustatyti galimai efektyviausias mutavimo procedūras, kaip vienus iš esminių ITP algoritmo sudedamųjų komponentų. Vykdant eksperimentinius tyrimus su ITP algoritmu ir mutavimo procedūromis, buvo pasinaudota kvadratinio paskirstymo uždavinio standartinių testavimo duomenų pavyzdžiais iš viešosios elektroninės KP uždavinio testavimo duomenų bibliotekos QAPLIB (Burkard ir kt., 1997). Eksperimentuose naudotas 3 GHz taktinio dažnio stacionarus asmeninis kompiuteris. Buvo naudota A. Misevičiaus ir D. Kuznecovaitės sudaryto iteracinio tabu paieškos algoritmo programinė realizacija C# programavimo kalba. ITP algoritmo ir visų mutavimo procedūrų programų tekstus galima rasti internete adresu: https://www.personalas.ktu.lt/~alfmise/.
Atliekant eksperimentus, ITP
algoritmo bei kartu mutavimo procedūrų veikimo efektyvumo įvertinimo ir
palyginimo kriterijus yra gaunamų sprendinių kokybės vidutinis santykinis
procentinis nuokrypis nuo geriausios žinomos tikslo funkcijos reikšmės (GŽR)
(angl. best known value). Vidutinis santykinis procentinis nuokrypis
()
apskaičiuojamas pagal formulę:
, čia
yra vidutinė
tikslo funkcijos reikšmė, gauta atlikus
pakartotinių algoritmo
vykdymų,
žymi geriausią žinomą tikslo funkcijos reikšmę, atitinkančią
(pseudo)optimalų sprendinį iš bibliotekos QAPLIB.
Kompiuteriniuose
eksperimentuose panaudoti šie bibliotekoje QAPLIB esantys testavimo duomenų
pavyzdžiai: tai10a, tai12a, tai15a, tai17a, tai20a, tai25a, tai30a, tai35a, tai40a, tai50a. Šie testavimo duomenys yra
sugeneruoti atsitiktiniu būdu ir laikytini sunkiausiai sprendžiamais
pavyzdžiais (Taillard, 1991). Eksperimentuota su trimis skirtingomis
mutavimo laipsnio reikšmėmis: ,
,
.
Eksperimentuose buvo tirtos anksčiau aprašytos mutavimo procedūros:
1) atsitiktinių porinių elementų sukeitimų mutavimas – M1;
2) atsitiktinio rakto mutavimas – M2;
3) priešinių reikšmių mutavimas – M3;
4) maksimalaus atstumo mutavimas – M4;
5) modifikuotas atsitiktinių sukeitimų mutavimas (I) – M5;
6) modifikuotas atsitiktinių sukeitimų mutavimas (II) – M6;
7) kombinuotas mutavimas – M7;
8) randomizuotos lokalios paieškos mutavimas – M8;
9) randomizuotos dalinės lokalios paieškos mutavimas – M9;
10) godžios adaptyvios paieškos mutavimas – M10;
11) godžios randomizuotos adaptyvios paieškos mutavimas – M11;
12) išsklaidytas mutavimas – M12.
Atliktų eksperimentų rezultatai pateikti 1-5 lentelėse. Lentelėse
parodytos gautų sprendinių vidutinių nuokrypių nuo (pseudo)optimalių
sprendinių reikšmės () visoms mutavimo procedūroms.
Testavimo duomenų pavyzdžiams tai10a, tai12a, tai15a visos mutavimo procedūros
įgalino pasiekti (pseudo)optimalius arba jiems labai artimus sprendinius.
Testavimo duomenims tai10a,
tai12a, tai15a, tai17a, tai20a vidutinis nuokrypis neviršija
,
visiems duomenims –
,9 proc. Visa tai liudija
pakankamai aukštą ITP algoritmo ir mutavimo procedūrų efektyvumo
laipsnį.
1 lentelė. Mutavimo procedūrų palyginimo rezultatai testavimo duomenų pavyzdžiams tai10a, tai12a
tai10a |
tai12a |
|||||
μ = 5 |
μ = 6 |
μ = 7 |
μ = 5 |
μ = 6 |
μ = 7 |
|
M1 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M2 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M3 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M4 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M5 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M6 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M7 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M8 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M9 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M10 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M11 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
M12 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
0,000 |
2 lentelė. Mutavimo procedūrų palyginimo rezultatai testavimo duomenų pavyzdžiams tai15a, tai17a
tai15a |
tai17a |
|||||
μ = 5 |
μ = 6 |
μ = 7 |
μ = 5 |
μ = 6 |
μ = 7 |
|
M1 |
0,000 |
0,000 |
0,000 |
0,708 |
0,273 |
0,075 |
M2 |
0,020 |
0,002 |
0,000 |
0,590 |
0,311 |
0,056 |
M3 |
0,159 |
0,135 |
0,080 |
0,355 |
0,324 |
0,129 |
M4 |
0,100 |
0,020 |
0,000 |
0,346 |
0,286 |
0,038 |
M5 |
0,040 |
0,000 |
0,020 |
0,456 |
0,165 |
0,188 |
M6 |
0,021 |
0,021 |
0,020 |
0,220 |
0,259 |
0,150 |
M7 |
0,100 |
0,021 |
0,200 |
0,465 |
0,534 |
0,339 |
M8 |
0,000 |
0,000 |
0,000 |
0,490 |
0,150 |
0,113 |
M9 |
0,000 |
0,000 |
0,000 |
0,268 |
0,113 |
0,093 |
M10 |
0,080 |
0,001 |
0,200 |
0,684 |
0,292 |
0,167 |
M11 |
0,080 |
0,020 |
0,042 |
0,695 |
0,688 |
0,449 |
M12 |
0,159 |
0,110 |
0,250 |
0,383 |
0,642 |
0,621 |
3 lentelė. Mutavimo procedūrų palyginimo rezultatai testavimo duomenų pavyzdžiams tai20a, tai25a
tai20a |
tai25a |
|||||
μ = 5 |
μ = 6 |
μ = 7 |
μ = 5 |
μ = 6 |
μ = 7 |
|
M1 |
0,522 |
0,624 |
0,566 |
1,045 |
0,.973 |
0,753 |
M2 |
0,505 |
0,272 |
0,648 |
0,857 |
0,883 |
0,899 |
M3 |
0,794 |
0,823 |
0,578 |
0,885 |
1,123 |
1,190 |
M4 |
0,605 |
0,685 |
0,441 |
1,006 |
0,849 |
0,722 |
M5 |
0,536 |
0,563 |
0,502 |
1,015 |
0,936 |
0,957 |
M6 |
0,689 |
0,627 |
0,509 |
1,097 |
1,092 |
0,688 |
M7 |
0,475 |
0,520 |
0,757 |
1,129 |
1,484 |
1,034 |
M8 |
0,569 |
0,373 |
0,345 |
1,067 |
0,843 |
0,718 |
M9 |
0,554 |
0,360 |
0,433 |
0,727 |
0,769 |
0,685 |
M10 |
0,659 |
0,441 |
0,506 |
1,122 |
1,151 |
1,049 |
M11 |
0,646 |
0,537 |
0,722 |
0,970 |
1,005 |
1,180 |
M12 |
0,567 |
0,835 |
0,773 |
1,216 |
1,329 |
1,160 |
4 lentelė. Mutavimo procedūrų palyginimo rezultatai testavimo duomenų pavyzdžiams tai30a, tai35a
tai30a |
tai35a |
|||||
μ = 5 |
μ = 6 |
μ = 7 |
μ = 5 |
μ = 6 |
μ = 7 |
|
M1 |
1,086 |
1,043 |
0,904 |
1,279 |
1,296 |
1,052 |
M2 |
1,362 |
0,891 |
0,892 |
1,278 |
1,195 |
1,158 |
M3 |
1,457 |
1,105 |
1,237 |
1,483 |
1,542 |
1,360 |
M4 |
1,239 |
1,118 |
0,984 |
1,465 |
1,159 |
1,031 |
M5 |
1,235 |
1,006 |
0,872 |
1,300 |
1,150 |
1,197 |
M6 |
1,200 |
0,964 |
0,938 |
1,072 |
1,204 |
1,024 |
M7 |
1,257 |
1,170 |
1,181 |
1,270 |
1,109 |
0,959 |
M8 |
1,091 |
0,927 |
0,980 |
1,234 |
1,152 |
1,194 |
M9 |
1,040 |
0,800 |
0,795 |
1,133 |
1,261 |
1,095 |
M10 |
1,202 |
1,002 |
1,089 |
1,151 |
1,260 |
1,275 |
M11 |
1,272 |
1,242 |
1,307 |
1,387 |
1,389 |
1,240 |
M12 |
0,763 |
1,119 |
1,220 |
1,243 |
1,216 |
1,221 |
5 lentelė. Mutavimo procedūrų palyginimo rezultatai testavimo duomenų pavyzdžiams tai40a, tai50a
tai40a |
tai50a |
|||||
μ = 5 |
μ = 6 |
μ = 7 |
μ = 5 |
μ = 6 |
μ = 7 |
|
M1 |
1,444 |
1,259 |
1,160 |
1,691 |
1,701 |
1,391 |
M2 |
1,315 |
1,468 |
1,417 |
1,525 |
1,550 |
1,687 |
M3 |
1,595 |
1,409 |
1,549 |
1,653 |
1,725 |
1,849 |
M4 |
1,485 |
1,323 |
1,227 |
1,574 |
1,732 |
1,704 |
M5 |
1,259 |
1,364 |
1,343 |
1,626 |
1,761 |
1,598 |
M6 |
1,312 |
1,475 |
1,170 |
1,614 |
1,765 |
1,427 |
M7 |
1,548 |
1,529 |
1,542 |
1,755 |
1,817 |
1,889 |
M8 |
1,247 |
1,355 |
1,256 |
1,828 |
1,634 |
1,526 |
M9 |
1,179 |
1,268 |
1,024 |
1,635 |
1,672 |
1,439 |
M10 |
1,419 |
1,406 |
1,393 |
1,735 |
1,563 |
1,697 |
M11 |
1,451 |
1,389 |
1,500 |
1,713 |
1,638 |
1,713 |
M12 |
1,298 |
1,273 |
1,477 |
1,387 |
1,673 |
1,770 |
Iš pateiktų palyginimo rezultatų matyti, jog randomizuotos dalinės lokalios paieškos mutavimo (M9) ir randomizuotos lokalios paieškos mutavimo (M8) panaudojimas leidžia pasiekti geresnius iteracinio tabu paieškos algoritmo rezultatus, palyginti su likusiomis kitomis mutavimo procedūromis. Pažymėtina, jog ir paprasta mutavimo procedūra (M1), besiremianti tik atsitiktiniais poriniais elementų sukeitimais, įgalina gauti geros kokybės sprendinius. Be to, M1 reikalauja, ko gero, mažiausiai centrinio procesoriaus laiko.
Matyti, kad mutavimo laipsnio reikšmės
padidinimas nebūtinai pagerina gaunamų sprendinių kokybę. Gali būti, jog ši
reikšmė yra susijusi su sprendžiamų pavyzdžių dydžiu
. Šiai
priklausomybei nustatyti reikalingi papildomi eksperimentiniai
tyrimai.
Šiame straipsnyje aprašytas dviejų lygių iteracinis tabu paieškos (ITP) algoritmas kvadratinio paskirstymo uždavinio sprendimui. Pagrindinis dėmesys skirtas į ITP algoritmą integruotoms mutavimo procedūroms, kurių esminė paskirtis yra diversifikuoti sprendinius, gaunamus vykdant tabu paiešką, ir taip pagerinti paieškos efektyvumą, lyginant su tradiciniais TP algoritmais, nenaudojančiais mutavimo.
Atlikti kompiuteriniai eksperimentai su dvylika pasiūlytų įvairių tipų mutavimo procedūrų, pradedant universalizuotu, grynai atsitiktiniu mutavimu ir baigiant kombinuotomis (kvazideterminuotomis) mutavimo procedūromis, kurios yra gana specializuotos ir orientuotos į konkretų sprendžiamą KP uždavinį. Sudarytos mutavimo procedūros pasižymi lankstumu, mutavimo stiprumą galima valdyti pagal vartotojo (tyrėjo) poreikius. Atlikti eksperimentiniai tyrimai, panaudojant KP uždavinio testavimo pavyzdžius iš bibliotekos QAPLIB, rodo, kad dviejų lygių ITP algoritmas leidžia gauti aukštos kokybės sprendinius. Palyginus įvairių mutavimo procedūrų efektyvumo rezultatus, galima daryti išvadą, jog mutavimo procedūros, kuriose įvertinamos tikslo funkcijos reikšmės ir kuriose yra integruotos papildomos priemonės sprendiniui dalinai pagerinti, yra galimai pranašesnės už tas procedūros, kurios neatsižvelgia į konkretaus uždavinio specifiką.
Ateityje dviejų lygių iteracinis tabu paieškos algoritmas galėtų būti toliau tobulinamas, integruojant į jį ištirtas efektyviausias mutavimo procedūras.
ABDEL-BASSET, Mohamed; MANOGARAN, Gunsekaran; EL-SHAHAT, Doaa; MIRJALILI, Seyedali (2018). Integrating the Whale Algorithm with Tabu Search for Quadratic Assignment Prob- lem: a New Approach for Locating Hospital Departments. Applied Soft Computing, vol. 73, p. 530–546. Prieiga per internetą: < https://doi.org/10.1016/j.asoc.2018.08.047>.
AHMED, Zakir H. (2015). A Multi-Parent Genetic Algorithm for the Quadratic Assignment Problem. OPSEARCH, vol. 52, p. 714–732. Prieiga per internetą: <https://doi.org/10.1007/s12597-015-0208-7>.
AKSAN, Yagmur; DOKEROGLU, Tansel; COSAR, Ahmet (2017). A Stagnation-aware Cooperative Parallel Breakout Local Search Algorithm for the Quadratic Assignment Problem. Computers & Industrial Engineering, vol. 103, p. 105–115. Prieiga per internetą: <https://doi.org/10.1016/j. cie.2016.11.023>.
BENLIC, Una; HAO, Jin-Kao (2013). Breakout Local Search for the Quadratic Assignment Prob- lem. Applied Mathematics and Computation, vol. 219, p. 4800–4815. Prieiga per internetą: < https://doi.org/10.1016/j.amc.2012.10.106 >.
BENLIC, Una; HAO, Jin-Kao (2015). Memetic Search for the Quadratic Assignment Problem. Expert Systems with Applications, vol. 42, p. 584–595. Prieiga per internetą: <https://doi.org/10.1016/j. eswa.2014.08.011>.
BURKARD, Rainer E.; KARISCH, Stefan E.; RENDL, Franz (1997). QAPLIB – a Quadratic Assignment Problem Library. Journal of Global Optimization, vol. 10, p. 391–403. Prieiga per internetą: <https://doi.org/10.1023/A:1008293323270> [žr. taip pat prieigą per internetą: < http://anjos.mgi.polymtl.ca/qaplib/>].
ÇELA, Eranda (1998). The Quadratic Assignment Problem: Theory and Algorithms. Dordrecht: Kluwer. 304 p.
CHMIEL, Wojciech (2019). Evolutionary Algorithm Using Conditional Expectation Value for Quadratic Assignment Problem. Swarm and Evolutionary Computation, vol. 46, p. 1–27. Prieiga per internetą: <https://doi.org/10.1016/j.swevo.2019.01.004>.
CHMIEL, Wojciech; KWIECIEŃ, Joanna (2018). Quantum-inspired Evolutionary Approach for the Quadratic Assignment Problem. Entropy, vol. 20, p. 781. Prieiga per internetą: <https://doi.org/10.3390/e20100781>.
DELL’AMICO, Mauro; TRUBIAN, Marco (1998). Solution of Large Weighted Equicut Problems. European Journal of Operational Research, vol. 106, p. 500–521.
DOKEROGLU, Tansel; SEVINÇ, Ender; COSAR, Ahmet (2019). Artificial Bee Colony Optimiza- tion for the Quadratic Assignment Problem. Applied Soft Computing, vol. 76, p. 595–606. Prieiga per internetą: <https://doi.org/10.1016/j.asoc.2019.01.001>.
DREZNER, Zvi (2003). A New Genetic Algorithm for the Quadratic Assignment Problem. IN- FORMS Journal on Computing, vol. 15, p. 320–330.
EDELKAMP, Stefan; SCHRÖDL, Stefan (2012). Heuristic Search. Theory and Applications. Waltham: Morgan Kaufmann Publishers. 712 p.
GAMBARDELLA, Luca M.; TAILLARD, Éric D.; DORIGO, Marco (1999). Ant Colonies for the Quadratic Assignment Problem. Journal of the Operational Research Society, vol. 50, p. 167–176.
GLOVER, Fred; LAGUNA, Manuel (1997). Tabu Search. Dordrecht: Kluwer. 382 p.
HAFIZ, Faizal M. F.; ABDENNOUR, Adel (2016). Particle Swarm Algorithm Variants for the Qua- dratic Assignment Problems - a Probabilistic Learning Approach. Expert Systems with Applications, vol. 44, p. 413–431. Prieiga per internetą: <https://doi.org/10.1016/j.eswa.2015.09.032>.
HANAN, Maurice; KURTZBERG, Jerome M. (1972). Placement Techniques. In Breuer, M. A. (ed.). Design Automation of Digital Systems: Theory and Techniques, vol. 1, Englwood Cliffs: Prentice- Hall, p. 213–282.
KOOPMANS, Tjalling C.; BECKMANN, Martin (1957). Assignment Problems and the Location of Economic Activities. Econometrica, vol. 25, p. 53–76.
LI, Yong; PARDALOS, Panos M.; RESENDE, Mauricio G. C. (1994). A Greedy Randomized Adaptive Search Procedure for the Quadratic Assignment Problem. In Pardalos, P. M.; Wolkowicz, H. (eds.). Quadratic Assignment and Related Problems. DIMACS Series in Discrete Mathematics and Theoretical Computer Science, vol. 16, Providence: AMS, p. 237–261.
LOURENCO, Helena R.; MARTIN, Olivier C.; STÜTZLE, Thomas (2002). Iterated Local Search. In Glover, F.; Kochenberger, G. (eds.). Handbook of Metaheuristics. Norwell: Kluwer, p. 321–353.
MERZ, Peter; FREISLEBEN, Bernd (2000). Fitness Landscape Analysis and Memetic Algorithms for the Quadratic Assignment Problem. IEEE Transactions on Evolutionary Computation, vol. 4, p. 337–352.
MICHALEWICZ, Zbigniew; FOGEL, David B. (2000). How to Solve It: Modern Heuristics. Berlin-Heidelberg: Springer. 467 p.
MISEVIČIUS, Alfonsas (2003). A Modified Simulated Annealing Algorithm for the Quadratic Assignment Problem. Informatica, vol. 14, p. 497–514.
MISEVICIUS, Alfonsas (2004). An Improved Hybrid Genetic Algorithm: New Results for the Quadratic Assignment Problem. Knowledge-Based Systems, vol. 17, p. 65–73.
MISEVICIUS, Alfonsas (2005). A Tabu Search Algorithm for the Quadratic Assignment Problem. Computational Optimization and Applications, vol. 30, p. 95–111.
SAHNI, Sartaj; GONZALEZ, Teofilo (1976). P-complete Approximation Problems. Journal of ACM, vol. 23, p. 555–565.
SHYLO, Volodymyr P. (2017). Solving the Quadratic Assignment Problem by the Repeated Iterated Tabu Search Method. Cybernetics and Systems Analysis, vol. 53, p. 308–311. Prieiga per internetą: <https://doi.org/10.1007/s10559-017-9930-x>.
SIARRY, Patrick (ed.). (2016). Metaheuristics. Cham: Springer. 489 p.
STÜTZLE, Thomas (2006). Iterated Local Search for the Quadratic Assignment Problem. Euro- pean Journal of Operational Research, vol. 174, p. 1519–1539. Prieiga per internetą: <https://doi. org/10.1016/j.ejor.2005.01.066>.
TAILLARD, Éric D. (1991). Robust Taboo Search for the QAP. Parallel Computing, vol. 17, p. 443–455.
TANG, Jing; LIM, Meng-Hiot; ONG, Yew S.; ER, Meng J. (2006). Parallel Memetic Algorithm with Selective Local Search for Large Scale Quadratic Assignment Problems. International Journal of Innovative Computing, Information and Control, vol. 2, p. 1399–1416.
YANG, Xin-She (2010). Nature-Inspired Metaheuristic Algorithms. Frome: Luniver Press. 160 p.
[1] Priminsime, jog
perstatymą formaliai galima nusakyti rinkiniu
;
;
;
, kai
;
.
[2]Panašus patobulinimas yra sukurtas ir klasikiniams lokaliosios paieškos algoritmams. Patobulinimas žinomas kaip iteratyvioji lokalioji paieška (angl. iterated local search) (Lourenco ir kt., 2002).