» »

Problem škatel

Problem škatel

«
1
2

svit ::

Lepo pozdravljeni,

sicer ne vem, če sem izbral pravo izbo za postavitev te teme, vendar bi potreboval pomoč oziroma nasvet. Naloga je optimizacijske narave, to sem nekako sam ugotovil, gre pa takole:

Imamo n škatel različne velikosti, dolžine in širine. Naša naloga je postaviti škatle ene v drugo tako, da bo vidnih čim manj škatlic. Število škatel, katerim se ne bi uspelo uvrstiti v množici mora biti minimalno. Lahko mešamo velikost, dolžino in širino med seboj. Dobil sem nasvet naj si pomagam z grafom vsebovanosti oziroma podrobnejše razlago o tem kaj je graf vsebovanosti:
"Točke so škatlice. Dve sta povezani, če prvo lahko postavimo v drugo. Lahko uporabljamo tudi samo skelet te relacije (odstranimo
tranzitivne povezave)."

Zanima me torej, če obstaja že napisan matematični algoritem za tak primer, katerega bom nato samo implementiral oziroma prilagodil tej nalogi.

Hvala


[edit - premaknil v izbo programiranje - vsc]
Ni ideje

Thomas ::

Akademsko al komercialno vprašanje?
Man muss immer generalisieren - Carl Jacobi

svit ::

Striktno akademsko.

Tukaj je še link, da je bedni projekt :)...

Projekt
Ni ideje

OwcA ::

Mora biti rešitev dokazljivo najboljša?
Otroška radovednost - gonilo napredka.

svit ::

Ne, vsaj mislim da ni pomembno oziroma bilo bi zaželjeno, da je med boljšimi.

Zanima me če obstaja že kakšen matematični algoritem, da ne bom odkrival tople vode. Sicer pa imam že eno idejo/algoritem kako bi rešil ta problem, vednar ni ravno dober v tem.
Ni ideje

Thomas ::

Tole je težek problem. NP, kokr vidim.
Man muss immer generalisieren - Carl Jacobi

Thomas ::

N=1;
do
_do

__izloči množice N škatel, ki gredo NATANKO N skupaj v katerokoli drugo škatlo

_until gre

_N++;

until N<500

count skatel
Man muss immer generalisieren - Carl Jacobi

Zgodovina sprememb…

  • spremenil: Thomas ()

Vesoljc ::

Abnormal behavior of abnormal brain makes me normal...

OwcA ::

Evolucijski aloritem.
Otroška radovednost - gonilo napredka.

svit ::

Sam sem tudi razmišljal o uporabi algoritma Nahrbtnika. Vendar je problem v tem, da nimamo dane največje dane vrednosti oziroma volumna. Prav tako nahrbtnik deluje (vsaj osnovna različica) z eno dimenzijo, tukaj pa je pomembna tudi oblika. Nekako pa ga bom skušal implementirati. S tem vprašanjem sem bolj mislil na nasvete o primernih algoritmih. Lahko pa bi naredil tudi en brute force algoritem, ki bi pač enkrat šel skozi množico škatel in upošteval samo dolžino ali pa kaj podobnega.

Sam sem nekako izpostavil te oporne točke:
- Primerjati bom moral ploskve škatel
- Za prvo sortiranje škatel bi uporabil volumen.
- Hkrati bo potrebno graditi drevo najbolj optimalne rešitve.

Tako na hitro.
Ni ideje

Thomas ::

A moj algoritem ti pa ni všeč?
Man muss immer generalisieren - Carl Jacobi

mia- ::

**Število škatel, katerim se ne bi uspelo uvrstiti v množici mora biti minimalno. Lahko mešamo velikost, dolžino in širino med seboj. **

kaj to točno pomeni?

Vesoljc ::

> da nimamo dane največje dane vrednosti oziroma volumna

kako ne? najdes pac najvecjo... tud sort po velikosti bi mogoce pomagal.
Abnormal behavior of abnormal brain makes me normal...

Vesoljc ::

@mia

to pomeni, da ti ni potrebno zapakirati vseh skatel.
Abnormal behavior of abnormal brain makes me normal...

OwcA ::

kako ne? najdes pac najvecjo... tud sort po velikosti bi mogoce pomagal.

To ni vredu, ker imaš lahko več škatel ("zunaj") v katere potem stlačiš vse ostale. Lahko pa določiš zgornjo mejo.
Otroška radovednost - gonilo napredka.

svit ::

Thomas: tvoj algoritem je čisto v redu. Toda je malo preveč splošen. Seveda se bo tudi moj poznejši algoritem držal tvojega. Sam sem mislil. da mogoče obstaja že matematično dokazan najboljši algoritem za tak problem. Ker ne študiram matematike, sem pač prosil za nasvet, da ne bom izumljal tople vode in se matral z "home made" algoritmom, ki bi ga potem posekal en zelo enostaven matematičen algoritem.

Pri mešanju dolžine, višine in širine sem mislil na zapis škatle (ai,bi,ci), kjer je ai dolžina, bi širina in ci višina škatle. No zdaj bi lahko privzeli da naloga ne dovoljuje rotacije škatle po x,y in z osi. To bi bila pač trivialna naloga, kjer bi samo primerjal ploskve (ai in bi) in izbiral naslednjo škatlo tako da bi bila razlika med ploskvama minimalna. Prav tako ne gre pozabiti, da se volumen strukture spreminja oziroma ni fiksen.


Sicer pa bo prvi korak iskanje najbolj prostorne škatle. Nekako tako si zamišljam še bolj podroben algoritem:

1.) Iskanje največje škatle (izračun ploskve po ai in bi, ai in ci, ci in bi)
2.) Grobo sortiranje škatel po volumnu oziroma po ploskvah
3.) Iskanje najbolj ustreznega kandidata za naslednjo škatlo
4.) Odstranjevanje neprimernih škatel iz množice rešitev (recimo zelo dolga in ozka škatla bi lahko pokvarila celo množico)
5.) Množica odstranjenih škatel mora biti minimalna
6.) Sprotno grajenje drevesa rešitve
7.) Primerjanje trenutno najboljšega drevesa rešitev s trenutnim drevesom

Tako na grobo se mi zdi.
Ni ideje

mia- ::

aha svit, sej si že sam skonstruiral dober algoritem..

najprej sestaviš usmerjen graf na n točkah.
usmerjen pomeni da so povezave usmerjene, in recmo če kaže puščica iz A v B, pomeni da gre škatla A v škatlo B...

Tak graf "vsebovanosti" ni težko skontruirati, predstavimo ga pa lahko z matriko n x n.

Ko enkrat zapišemo graf, iščemo najdalšo (usmerjeno) pot po grafu. Za to
pa mislim da že obstajajo algoritmi.

Vesoljc ::

mas prav owca
Abnormal behavior of abnormal brain makes me normal...

svit ::

Mia- zelo hvala za podrobnejšo razlago grafa vsebovanosti. Se bo treba spraviti na delo.
Ni ideje

Thomas ::

1. Greš skozi vse škatle in gledaš, katera gre samo ona sama v katerokoli drugo. Če jo najdeš, jo izločiš, tisto ki gre not in tisto, v katero gre najbolj natesno - in začneš s tem postopkom znova.


2. Zdej probaš z dvema, kot prej z eno.

3. S tremi.

..

..

Prešteješ škatle, ki so ti ostale.
Man muss immer generalisieren - Carl Jacobi

mia- ::

s tranzitivnostjo je mišljeno
če gre škatla A v škatlo B, in škatla B v škatlo C, pomeni
da gre tudi škatla A v škatlo C.. A vendar, pri konstrukciji grafa , je fajn če povezav v tem primeru iz A v C ne narediš, kajti to bo samo podaljšalo računanje najdalše poti. Pravim da je fajn zato, ker nevem točno kako bi to naredil:) no če malce razmislim..

Konstruiral bi jaz tako, da bi za vsako škatlo kr pogledu v katere škatle "paše" in naredu puščice.
Potem pa še čez potegnu en algoritem k bi zbrisu tranzitivne povezave.
.. sam, kukr se mi zdi na prvi pogled bi to znal bit kr "grdo".
Mogoče se bolj splača da pustiš kr tko k je, pa pač računaš najdaljš pot na neoskubljenem grafu.

Thomas ::

Tisto z vsebovanostjo ni tako dobro. Ker vsebovanostnih matrik je več različnih, pa miajin algoritem ne določa, kateri potem najti usmerjeni graf.
Man muss immer generalisieren - Carl Jacobi

Thomas ::

mia je pozabu, da gre lahko 7 škatel v eno.
Man muss immer generalisieren - Carl Jacobi

mia- ::

ja in če gre ena škatla v 7?
je torej iz ene škatle 7 puščic.. in?

in NE, matrika totalne vsebovanosti(z tranzitivnimi povezavami) je samo ENA, karkšnakoli okleščena matrika tranzitivnih povezav, bo pa tudi enako dobra, samo hitrejše bo deloval algoritem iskanja najdalše poti

Thomas ::

Thomas:

> mia je pozabu, da gre lahko 7 škatel v eno.

mia-:

> ja in če gre ena škatla v 7?

Ne ena v 7. 7 v eno!

Zapopadu?
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Ni vseeno, katerih 7 (ali N) škatel zapakiramo v katero škatlo. Izid je lahko potem precej različen.

Moram narisat?
Man muss immer generalisieren - Carl Jacobi

svit ::

Miina in Thomasova rešitvi sta čisto enakovredni. Zdi se mi da Mia gleda s strani največje škatle proti najmanjši, Thomas pa obratno z najmanjše proti največji. Master matrika vsebovanosti pa mora biti.
Ni ideje

Zgodovina sprememb…

  • spremenilo: svit ()

Thomas ::

NI unikatne matrike vsebovanosti. V eno škatlo v splošnem lahko daš alternativne množice škatel. Ti jih lahko potem več/manj ostane.

Štekaš?
Man muss immer generalisieren - Carl Jacobi

Thomas ::

Namesto, da daš škatle A, B in C v škatlo X, daš recimo D, E in F v škatlo X. Potem morda A ne boš imel več kam dati, pa bo ostala zunaj, ker gre edino v X.

Zdej štekaš?
Man muss immer generalisieren - Carl Jacobi

snow ::

Evolucijski algoritem.

Encoding nekaj v stilu:
zunanja skatla: notranja skatla&rotacija; notranja skatla2&rotacija2... (saj rotacij/postavitev je 6(3!) a ne?)

Npr:
1: 3,0 4,2
2: 1,5
3:
4:

Mutacije:
mal prestavljaš škatle iz eno v drugo in jih sučeš...
osebke v evoluciji lahko med sabo tudi mal križaš.. ampak mal treba pazit.

Fitness:
Število škatel, ki ni v nobeni škatli.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Thomas ::

Že prej OwcA in zdej snow imata prav. Z EA se da! :)
Man muss immer generalisieren - Carl Jacobi

mia- ::

aha 7 škatel v 1..
no torej gre iz vsake točke izmed teh 7 ena puščica v to točko.. in?

ta graf ne predstavlja rešitve.. ta graf samo pove možno vsebovanost.
Rešitev je pa najdaljša možna pot v grafu(po usmerjenih povezavah)..torej največje število škatel, ki drugo drugo lahko vsebujejo, in torej največja vsebuje vse.

Thomas ::

Ni res.

Za vajo ugotovi zakaj ne.
Man muss immer generalisieren - Carl Jacobi

mia- ::

haha thomas, lol.. ??

dejte brisat post k je neargumentiran :D :D

za vajo pa lah ti pošlješ mail prof Batagelju ki je nalogo zastavil in se prepričaj, kot pa da tu pišeš neresnice , ki izhajajo iz tvoje nesposobnosti logičnega razmišljanja

OwcA ::

Kako lahko na takšnem grafu najdeš rešitev kjer pakiraš v 1., 2. in 4. škatlo po velikosti? Da bi bila optimalna rešitev vedno pakiranje v samo eno škatlo niti slučajno ni očitno (pravzaprav je kar narobe ;)).
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Thomas ::

Dost si šorf za svoje neznanje mia-.

> Da bi bila optimalna rešitev vedno pakiranje v samo eno škatlo niti slučajno ni očitno (pravzaprav je kar narobe ;)).

A OwcAtov stavek mogoče pa razumeš? Naj ti ga ilustriram dodatno?

Lej, za kakšno škatlo imaš alternative, katere škatle boš spakiral notri eno zraven druge. Niso vse te alternative enakovredne. Pri nekaterih morda nazadnje ostane več škatel zunaj. V splošnem je tako.
Man muss immer generalisieren - Carl Jacobi

mia- ::

Ok za nekatere je ocitno (recimo svit) za druge spet ne..
imas graf vsebovanosti.. s puscicam..Fora je v tem, da isces pot z maksimalno dolzino . Recimo da ima graf n tock, imamo pa pot na k tockah. Ta pot, ki gre skozi k tock, nam pove, da
gre prva skatla v drugo, druga v tretjo, in k-1 -ta skatla gre v k-to...
Ce je ta k maksimalen mozen, potem ta pot predstavlja maksimalno stevilo skatel, ki jih lahko zapakiramo. Torej k skatel lahko zapakiramo.
Zakaj NE obstaja vecje stevilo skatel kot k? Zato ker je k maksimalen mozen med vsemi kji.. Kajti ta k , predstavlja dolzino poti, in mi smo poiskali ravno pot, ki je najdaljsa!!

Thomas ::

Narobe.

Škatle lahko dajemo po več v eno. Pa v vsaki od njih jih je lahko po več, ali nobene.

NI potem enoznačno, kje, v kateri je lahko katera škatla.


p.s.

Celo če je, zadeva še NI taka. Ampak o tem kasneje, nej se zmenimo najprej tole.
Man muss immer generalisieren - Carl Jacobi

Zgodovina sprememb…

  • spremenil: Thomas ()

mia- ::

to je vse zajeto, samo glavo mors uporabit

Thomas ::

Če bi uprabil glavo, bi vedel da ni res.

VEČ škatel naenkrat je lahko v škatli X. Škatli A in B naprimer, ALI pa škatli C in D sta lahko v X. Vendar potem A ni več, pa gre C lahko tudi v A.

ITD...

Ali drugače rečeno. Če neko škatlo damo nekam, potem mnoge druge tja ne gredo več.

Ja?
Man muss immer generalisieren - Carl Jacobi

OwcA ::

Protiprimer: BŠS vzamemo kocke. Recimo, da imamo kocke s stranicami a, 2/3a, a/2 (4x), a/3 in a/4. Najdaljša pot po grafu vsebovanosti (ob upoštevanju tranzitivnosti) je a/4->a/3->a/2->2/3a->a, ampak pri tej rešitvi dobimo 4 vidne škatle. Obstaja vsaj ena boljša rešitev, namreč da vse a/2 škatle zbašemo v a, preostale pa v 2/3a.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

svit ::

Thomas: graf vsebovanosti nam pove kako lahko sestavimo škatle. To hoče povedati mia-. Primer z enoštevilčnimi vrednostmi.
A = 5
B = 6
C = 7
D = 4

Matrika 4x4 vsebovanosti pa bi zgledala takole. Predpostavimo, da je škatla lahko vsebovana sami sebi

A 1 1 1 0
B 0 1 1 0
C 0 0 1 0
D 1 1 1 1

To nam samo pove kandidate kako sestavljati škatle skupaj. Tvoj algoritem bi vzel škatlo D in jo primerjal z vsemi v množici. Miin bi pa poiskal najdaljšo pot.
Ni ideje

Zgodovina sprememb…

  • spremenilo: svit ()

Thomas ::

Ne ni res. Vsebovanost ni brezpogojna.

Lahko gre A v X in lahko gre B v X.

Oba - A in B - pa ne!

Zdej štekaš?
Man muss immer generalisieren - Carl Jacobi

mia- ::

v tvojem primeru bi torej slo C v A in B v X..
sedaj opažam da so navodila dvolična in si jih jas drugače intepretiram kot ti, zato tudi nasprotovanja

jas si interpretiram tako da dajes eno v drugo in potem drugo spet v tretjo, itd.. ti pa mislim da dopuscas tut da gresta 2 skatli v eno, druga zraven druge, ne ena v drugi

torej je sedaj odvisno od naloge, kako tocno je zastavljena..

Thomas ::

No, nazadnje štekaš. Hvalabogu.
Man muss immer generalisieren - Carl Jacobi

svit ::

Thomas: Poglej, tisto je samo zemljevid, ki nam pove katere škatle lahko daš skupaj. To ne pomeni, da lahko gresta v škatlo X tako A kot B. Zato pa moraš sproti graditi drevo rešitev, ki ga primerjaš s trenutno najboljšim drevesom rešitev. Itak ne greš samo enkrat čez to matriko ampak večkrat in primerjaš med seboj različice.

Hm... zdaj vidim da je mogoče tudi na tak način Da sta lahko dve različni škatli, druga ob drugi. Jaz sem mislil, da je naloga takšna, da vstavljaš eno škatlo v drugo in tisto kar ostane zunaj te "velike" škatle, spet urediš v novi škatli.
Ni ideje

Zgodovina sprememb…

  • spremenilo: svit ()

mia- ::

ja to mas res owca samo

kukr sm jas spraseval in razumel o nalogi je tko
da zapakiramo samo enkrat, ostale pa ostanejo zunaj vsaka zase..

no sicer v tem primeru bi pa iskal vec neodvisnih poti..

sicer je pa naloga preskopo definirana ,

Thomas ::

Ne, ne. Naloga je čisto OK, moj algoritem pa zelo dober.

Ima še en popravek, ki ga pa ne bom dal. Ne zaslužite si.
Man muss immer generalisieren - Carl Jacobi

svit ::

Mislm, da je naloga, da morajo biti škatle ena v drugi. Tako da mislim, da ni dovoljeno, da sta v eni škatli dve drug ob drugi. Bom povprašal še za več informacij.

Aha imam dodatne specifikacije:

"Točke so škatlice. Dve sta povezani, če prvo lahko postavimo v drugo. Lahko uporabljamo tudi samo skelet te relacije (odstranimo tranzitivne povezave)."
Ni ideje

Thomas ::

> Mislm, da je naloga, da morajo biti škatle ena v drugi.

Prima. Prima. Hehe ...

Besides. ČETUDI - ni enolične linije vsebovanosti, še vedno ne.

!!!
Man muss immer generalisieren - Carl Jacobi
«
1
2


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c++] naloge

Oddelek: Programiranje
476120 (4660) technolog
»

Kaj sploh je programiranje? (strani: 1 2 )

Oddelek: Programiranje
5411008 (9009) imagodei
»

RMA za WD disk

Oddelek: Strojna oprema
164254 (3909) ender
»

Colour (3,14.......) noise

Oddelek: Znanost in tehnologija
122476 (2082) Thomas
»

Škatlar Zmago na POPu

Oddelek: Znanost in tehnologija
272493 (1766) ThePlayer

Več podobnih tem