Algotimizace prostrihu

Galloth lordgalloth@gmail.com
Neděle Březen 25 11:54:37 CEST 2007


Rekl bych ze evolucni algoritmus bude rozhodne horsi. Obecne se
evolucni algoritmy maji pouzivat tam, kde neni znam zadny algoritmus
vedouci k reseni. Pokud algoritmus znate, tak evolucni algoritmy budou
mnohem horsi, navic u nich nemate zajisteno, ze se vubec nekam
dopracuji (muzou uvaznout v lokalnim optimu).

25.3.07, Ales Prochaska <prochaska@alsoft.cz>:
> Jasne, tohle bylo reseni metodou nejmensiho odporu neboli receno
> ajtackou mluvou "prototyp aplikace". V dalsim kroku se daji u ctyr z
> tech cyklu dopocitat horni meze a dva cykly se daji zrusit protoze
> hodnotu ridici promenne lze vypocist z ostatnich.
>
> Kdyz tak nahodte taky nejaky evolucni algoritmus, treba taky
> primitivni ale funkcni. Osobne by me docela zajimalo porovnani
> ucinnosti obou algoritmu.
>
> Ales Prochaska
>
> > Nejste moc daleko od nejake prakticke realizace.
>
> > Obecne zde mate nekolik cyklu for, ktere daji casove zabrat. Evolucni
> > algoritmy se zaobariaji jen tim, ze vam rychleji pomohou najit ty promenne
> > orient_LH, ... . Je to pomerne jednoduche.
>
> > Jirka
> > ----- Original Message -----
> > From: "Ales Prochaska" <prochaska@alsoft.cz>
> > To: <hw-list@list.hw.cz>
> > Sent: Saturday, March 24, 2007 7:36 PM
> > Subject: Re: Algotimizace prostrihu
>
>
> > Docela me zaujalo jak tu navrhujete geneticke algoritmy a podobne
> > teoreticky dobre zvladnute uvahy, ale nejak mi pripada, ze by bylo
> > tezke z toho neco vydolovat pro praxi. Takze jsem pustil delfi a na
> > treti preklad mi vypadlo tohle. Najde to nejlepsi pokryti zalozene na
> > sireni pokryti ze vsech rohu papiru soucasne. Urcite to pujde urychlit
> > doplnenim dynamickych mezi cyklu a nahradou tech poli [0..1]
> > promennymi a dosazovanim do nich a podobne.
>
> > Ales Prochaska
>
>
> > program rezani;
>
> > {$APPTYPE CONSOLE}
>
> > uses
> >   SysUtils;
>
> > const
> >   papir_x     = 210;
> >   papir_y     = 297;
> >   papirek_x   = 50;
> >   papirek_y   = 100;
>
> > var
> >   orient_LH   : integer; // 0 = na sirku, 1 = na delku
> >   orient_PH   : integer;
> >   orient_LD   : integer;
> >   orient_PD   : integer;
>
> >   pocet_LH_x   : integer;
> >   pocet_LH_y   : integer;
> >   pocet_PH_x   : integer;
> >   pocet_PH_y   : integer;
> >   pocet_LD_x   : integer;
> >   pocet_LD_y   : integer;
> >   pocet_PD_x   : integer;
> >   pocet_PD_y   : integer;
>
> >   rozmer_x     : array [0..1] of integer; // transformace rozmeru (rotace
> > papiru)
> >   rozmer_y     : array [0..1] of integer;
>
>
> >   plocha       : integer; // pokryta plocha v jedne iteraci
> >   max_plocha   : integer; // maximalni dosud nalezene pokryti plochy
>
> > begin
> >   rozmer_x[0]:=papirek_x;
> >   rozmer_x[1]:=papirek_y;
> >   rozmer_y[0]:=papirek_y;
> >   rozmer_y[1]:=papirek_x;
>
> >   max_plocha := 0;
>
> >   // vyzkouset vsechny orientace v rozich
> >   for orient_LH:=0 to 1 do begin
> >   for orient_PH:=0 to 1 do begin
> >   for orient_LD:=0 to 1 do begin
> >   for orient_PD:=0 to 1 do begin
>
> >     // plnit papir zkusmo ze vsech rohu
> >     for pocet_LH_x:=0 to papir_x div rozmer_x[orient_LH] do begin
> >     for pocet_LH_y:=0 to papir_y div rozmer_y[orient_LH] do begin
> >     for pocet_PH_x:=0 to papir_x div rozmer_x[orient_PH] do begin
> >     for pocet_PH_y:=0 to papir_y div rozmer_y[orient_PH] do begin
> >     for pocet_LD_x:=0 to papir_x div rozmer_x[orient_LD] do begin
> >     for pocet_LD_y:=0 to papir_y div rozmer_y[orient_LD] do begin
> >     for pocet_PD_x:=0 to papir_x div rozmer_x[orient_PD] do begin
> >     for pocet_PD_y:=0 to papir_y div rozmer_y[orient_PD] do begin
>
> >       // neprekryvaji se potvory?
> >       if  (pocet_LH_x * rozmer_x[orient_LH] + pocet_PH_x *
> > rozmer_x[orient_PH] <= papir_x)
> >       and (pocet_LD_x * rozmer_x[orient_LD] + pocet_PD_x *
> > rozmer_x[orient_PD] <= papir_x)
> >       and (pocet_LH_y * rozmer_y[orient_LH] + pocet_LD_y *
> > rozmer_y[orient_LD] <= papir_y)
> >       and (pocet_PH_y * rozmer_y[orient_PH] + pocet_PD_y *
> > rozmer_y[orient_PD] <= papir_y)
> >       and ((pocet_LH_x * rozmer_x[orient_LH] + pocet_PD_x *
> > rozmer_x[orient_PD] <= papir_x)
> >            or (pocet_LH_y * rozmer_y[orient_LH] + pocet_PD_y *
> > rozmer_y[orient_PD] <= papir_y))
> >       and ((pocet_LD_x * rozmer_x[orient_LD] + pocet_PH_x *
> > rozmer_x[orient_PH] <= papir_x)
> >            or (pocet_LD_y * rozmer_y[orient_LD] + pocet_PH_y *
> > rozmer_y[orient_PH] <= papir_y))
> >       then begin
> >         plocha := pocet_LH_x * rozmer_x[orient_LH] * pocet_LH_y *
> > rozmer_y[orient_LH]
> >                 + pocet_PH_x * rozmer_x[orient_PH] * pocet_PH_y *
> > rozmer_y[orient_PH]
> >                 + pocet_LD_x * rozmer_x[orient_LD] * pocet_LD_y *
> > rozmer_y[orient_LD]
> >                 + pocet_PD_x * rozmer_x[orient_PD] * pocet_PD_y *
> > rozmer_y[orient_PD];
>
> >         if plocha > max_plocha then begin
> >           max_plocha:=plocha;
> >           // kontrolni vypis
> >           writeln('Pokryta plocha:
> > ',plocha/(papir_x*papir_y)*100:3:2,' %');
> >           // zde doprogramovat ulozeni rozlozeni papirku
> >           end; //if
>
> >         end; //if
>
> >       end; //for
> >       end; //for
> >       end; //for
> >       end; //for
> >       end; //for
> >       end; //for
> >       end; //for
> >       end; //for
>
> >     end; //for
> >     end; //for
> >     end; //for
> >     end; //for
>
> >     readln;
> > end.
>
>
>
>
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list@list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
>
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list@list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


-- 
Jan Kastil
galloth@jabbim.cz



Další informace o konferenci Hw-list