[ erc kragujevac @ 12.01.2016. 14:09 ] @
Moze li neko da pogleda zasto dobijam poruku kao u prilogu.
Poenta je da se selktuju celije nad kojiam treba da se odradi kod i da se onda startuje makro.
Nekad ( do 24-25 celija) odradi i ispise resenje,a nekad izbaci gresku
type missmatch ili samo 400.



Kakva je sansa da neko modifikuje kod tako da recimo radi nad svim celijama(53), ali da krene sa iniT=1000 i cooling rate=0.9. trebalo bi u nekoj iteraciji da proces stane sam od sebe i da ispise sva nadjena resenja.

A onda ide i racunanje distanci(rute), ali...
[ djoka_l @ 12.01.2016. 14:49 ] @
Nemam pojma šta kod radi, pokušao sam da ga ispratim dodavanjem poruka.
Ono do čega sam dopšao je to da se ona rekurzivna funkcija jako duboko poziva.

Moj prva sumnja je da program pukne kada dubina rekrzije postane prevelika.
[ erc kragujevac @ 12.01.2016. 15:50 ] @
Moguce da si u pravu.

Ja sam kod preuzeo i samo ukapirao da u a1 ide 0 a u a2 zeljena vrednost ( suma).
Program treba da ispituje sve moguce kombinacije da se dobije zeljena suma prateci vrednosti od a3 do a53.
A3 je 0 kao polazna tacka za isporucivanje,a ostale vrednosti su velicina nekog zahteva .
Treba da napravim programcic koji ce da radi odredjeni broj iteracija za inicijalnu temperaturu 1000 i cooling rate 0.9.

Kapacitet vozila za dostavu je 10 i treba naci najbolju rutu racunanjem rastojanja izmedju zadatih koordinata.
Moaj ideja je bila da nadjem sto veci broj ruta ( ovaj program kaze da je kombinacija recimo a4, a5, a7, a13) sa sumom 10, a onda za njih izracunam najkracu putanju.

Evo nove greske

P.S Kakva je sansa da modifikujes program tako da radi sa parametrima temperatura i hladjenje i da na nekoj temperaturi samo ispise rezultate bez obzira na koliko je iteracija uradio.

Evo rezultata ako ce ti biti lakse - selektovao sam prvih 24-25 slogova i uradio run. Za par sekundi je izbacio sadrzaj u koloni b, a svaka od tih putanja znaci da zbir celija daje 10 pri cemu je celija oznacena kao 1 u putanji u sustini celija a3
[ djoka_l @ 12.01.2016. 16:18 ] @
Sve moguće kombinacije znači da program treba da ispita kombinacija što je u tvom primeru preko .
Čim sam video da je primenjena rekurzija odmah sam pomislio da se pokušava rešavanje problem grubom silom, kada takav pristup nije moguć.

Tvoj opis tek zbunjuje, ne vidim graf, ne vidim kamion, ne vidim kakve veze ima cooling rate sa bilo čim.
[ erc kragujevac @ 12.01.2016. 21:34 ] @
Evo da probam da budem precizan.

Potrebno je odraditi capacity vehicle routing problem primenom heuristic simulated annealing.

U principu je dato da postoje tacke isporuke ( x,y koordinate i demand kao broj zahteva(paketa koje treba isporuciti) za konkretnu tacku isporuke)
Dato je da je kapacitet vozila 10, a ja sam onda pokupio ovaj kod sa neta unpokusaju da isforsiram da mi da kombinacije tacaka za isporuku koje zadovoljavaju maksimalnu iskoriscenost vozila.

Posle toga sam zeleo da na neki nacin odredim duzinu putanje i izaberem najkracu.

Ovde postoji inicijalna temperatura i cooling rate da bi program u jednom trenutku stao sa iteracijama, ali ja ne umem da ih primenim.

Imao sam i neki VS koji navodno radi,ali meni exe daje poruku o gresci i nedostajucem dll.

Sve sam probao, ali izgleda da mora ovako grubom silom.


kamo srece da mogu da kazem programu :


kreni sa polaznih koordinata i obilazi tacke za isporuku ( suma isporuka manja ili jednaka 10) pa se vrati na polaznu tacku za novi utovar.


Tako da random odradi odredjen broj iteracija baziran na temperaturi i cooling rate-u i da onda ponudi najbolju rutu od dobijenih.


Hvala na pomoci do sada, a molim te da se ukljucis ako imas ideju da ovo resim ( makar u postojeci kod implementirao neki okidac da stane sa proracunom, ali da sve tacke mogu da ucestvuju u random racunu)


Pozdrav

[ djoka_l @ 13.01.2016. 11:47 ] @
Kada sam rekao da ne vidim graf to znači da u tvom opisu problema ne postoji opis grafa.

Imaš neke čvorove, valjda njih 50. Da bi opisao taj graf treba da napraviš neku matricu incidencije, odnosno da napraviš matricu 50x50 u kojoj ćeš staviti udaljenost od jednog do drugog čvora - polje m(i,j) treba da predstavlja udaljenost od i do j. Ili da ga predstaviš listom koja bi imala i,j,d gde je d rastojanje od i do j.
E, toga nema.

Onda pričaš o nekoj temperaturi. Pretpostavljam da je to neka incijalna ukupna dužina puteva koja treba da se optimizije. Pričaš o heurističkom algoritmu, a generišeš SVE puteve. Pa kada bi tako moglo, ne bi bila potrebna heuristika. Ali ne može.

Pogledaj samo podatke koje si generisao, prvih 1700 putanja uključuju čvor 2 iz čvora 1. Pa kada jednom dostaviš robu u 2 on ti više ne treba. Tebi treba jedan put koji prolazi kroz 2 i nijedan više. Onda, u tvojim putanjama imaš hiljade putanja koje uključuju čvorove u koje je potrebno dostaviti 0 robe. To ti je potpuno nepotrebno.

E o tome ti pričam. Generišeš gomile nepotrebnih podataka za problem za koji je takav pristup nemoguć.
[ erc kragujevac @ 13.01.2016. 20:52 ] @
Hvala na smernicama, ali inicijalni zadatak je da se nadju moguce putanje, a onda izabere najpovolnija.
Datoje da je kapacitet vozila 10, da je inicjalna temperatura 1000( temperatura procesora , a cooling rate treba da je umanjuje pri svakoj iteraciji ,0.9 * iniT i da sistem prestane sa obracunom na nekoj vrednosti). To je valjda simulated annealing - Simulated annealing is a method for solving unconstrained and bound-constrained optimization problems. The method models the physical process of heating a material and then slowly lowering the temperature to decrease defects, thus minimizing the system energy.

Date su samo koordinate koje ako ih ubacim cesto nisu realne posto pokazuju okean i slicno.
Pored toga su date i porudzbine po svakoj stanici da bi se manipulisalo cinjenicom daje kapacitet 10.
Nadam se da su dobre distance u excelu izracunte na 2 nacina,ali ja mislim da je Euclidian bolji.

Heuristika treba da bude primenjena, ali sam probao da radim sve kombinacije sa kapicitetom 10 i posecivanjem samo onih stanica gde je suma zahteva toliko.

Ima li sanse da mi pomognes oko koda koji bi odradio ovako nesto.

Inicijalna ideja je da se prodje kroz sve stanice,a pored toga i da postoji povratak u polaznu tacku kada se isporuci do 10 paketa.


Ima li sanse da mi pomognes da postavim program koji bi racunao izvesan broj mogucih putanja respektujuci polazne parametre. Nesto kao u prilogu.

[Ovu poruku je menjao erc kragujevac dana 13.01.2016. u 22:07 GMT+1]
[ djoka_l @ 14.01.2016. 00:16 ] @
Da vidim da li sam razumeo.

Treba da rešiš problem distribucije paketa u 50 čvorova (polazni čvor je nulti i još 50 čvorova).
Svaki čvor je povezan sa svakim drugim čvorom, a rastojanja su data u tabeli.
Ako čvor zahteva n paketa, moraš da mu isporučiš ili n ili 0 (ovo je jako bitno - da li mora porudžbina da se u potpunosti zadovolji ili može i parcijalno).

Ako su ove postavke tačne. Ovako bih ja rešio zadatak:

Prostor stanja su sve permutacije 50 elemenata.
Na primer, ako je permutacija (23 47 3 ... ) to bi značilo da se iz polaznog čvora dođe u čvor 23 pa 47 sve dok ima robe, pa onda nazad u 0 kada se kamion isprazni.
Da bih smanjio prostor, na početku bih naređao prvo sve čvorove kojima treba 0 paketa, jer u njih ne treba da se ide, pa je dužina puta do njih 0. Neka je tih čvorova k. Od preostalih 50-k se napravi permutacija pa se onda vidi koliki je ukupan put.
Nova tačka se traži tako što se od onih 50-k nenultih čvorova zamene, pa se ponovo izračuna put.

Za računanje puteva bi se koristi Dijkstrin algoritam za računanje najkraćeg puta u grafu.
[ djoka_l @ 14.01.2016. 10:01 ] @
Poslednja stvar koju sam pisao ne stoji / svaki čvor je povezan sa svakim drugim pravom linijom, tako da ne mora da se koristi Dijkstrin algoritam za pronalaženje najkraćeg puta. Uvek je najkraćui put iz i u j direktna linija koja povezuje i i j.
[ erc kragujevac @ 16.01.2016. 14:34 ] @
Citat:
djoka_l:
Da vidim da li sam razumeo.

Treba da rešiš problem distribucije paketa u 50 čvorova (polazni čvor je nulti i još 50 čvorova).
Svaki čvor je povezan sa svakim drugim čvorom, a rastojanja su data u tabeli.
Ako čvor zahteva n paketa, moraš da mu isporučiš ili n ili 0 (ovo je jako bitno - da li mora porudžbina da se u potpunosti zadovolji ili može i parcijalno).

Ako su ove postavke tačne. Ovako bih ja rešio zadatak:

Prostor stanja su sve permutacije 50 elemenata.
Na primer, ako je permutacija (23 47 3 ... ) to bi značilo da se iz polaznog čvora dođe u čvor 23 pa 47 sve dok ima robe, pa onda nazad u 0 kada se kamion isprazni.
Da bih smanjio prostor, na početku bih naređao prvo sve čvorove kojima treba 0 paketa, jer u njih ne treba da se ide, pa je dužina puta do njih 0. Neka je tih čvorova k. Od preostalih 50-k se napravi permutacija pa se onda vidi koliki je ukupan put.
Nova tačka se traži tako što se od onih 50-k nenultih čvorova zamene, pa se ponovo izračuna put.

Za računanje puteva bi se koristi Dijkstrin algoritam za računanje najkraćeg puta u grafu.



Polazni cvor je definisan koordinatama [10,20], ali mogu i da se postave drugacije. To je kao magacin iz koga se krece i u koji treba da se vraca kada isporuci do 10 paketa koliki je maksimalni kapacitet.

Rastojanaj mogu iz tabele ili eventualno an osnovu zadatih koordinata koje isto tako mogu da se menjaju.
Treba porudzbina da se zadovolji u potpunosti, ali i mene ovo malo buni posto je pitanje da li prioritet treba zaista dati potpunoj isporuci ako se trazi najkraca ruta.
Ipak bih radio sa potpunom isporukom koja ce se uraditi najkracom mogucom rutom.

poptuno se slazem sa tobom oko permutacije 50 elemenata.

Za racunanje puteva mislim da nije bas neophodan ovaj algoritam.

Imas li nesto slicno vec uradjeno i kakva je sansa da mi kazes ako vec postoje gotove biblioteke pa da probam da ih upakujem.

ja evo uspeo nesto sa gotovim softverom VRPH, ali bih voleo da dam ulazni fajl kroz command prompt, a bas mi i ne ide.