» »

[C#] Diferencialna evolucija

[C#] Diferencialna evolucija

Ciklamen ::

Lep pozdrav.

A mi zna kdo malo drugače razložit algoritem diferencialne evolucije?

Difrencialna evolucija - iz tega moramo napisati program, ampak meni ne gre v glavo čisto kako inicializiraš vse agente (kot opažam se uporablja 2d array), kasneje je psevdokod precej straight forward :)

Vem da je spodaj koda vbistvu napisana, a rad bi to razumel bolj kot samo prepisal :)
- End of the Post ->

Randomness ::

Saj je na linku, ki si ga podal, v poglavju Algorithm vse natančno razloženo. Kaj natančno ti ni jasno? Agent je v tem primeru samo fancy ime za točko v n-razsežnem prostoru.

DaMachk ::

Agent oz Individual oz. Posamezni predstavnik ene populacije ti predstavlja morebitno rešitev na problematiko, ki jo želiš reševat z (diferencialno) evolucijo.
Kar pomeni da je oblika Individuala povsem prilagojena problematiki.

DE (bom kar okrajšal) načeloma ne potrebuje rezultatov za nazaj, zato lahko populacije predstavljaš z enim arrayom ali listom.

DE je načeloma evolucijski algoritem s specifičnim izbiranjem kako se bodo "križali" posamezniki v populaciji.

Splošna razlaga evolucijskega algoritma:
1. populacijo z N posamezniki (N določiš kot uporabnik) ustvariš naključno v prostoru možnih rešitev (ZELO odvisno od tega kakšne je problematika ki jo rešuješ)... [Recimo da iščeš ekstrem neke funkcije v 2D prostoru. To pomeni, da iščeš točko z X in Y koordinato - posamezniki bodo vsebovali X in Y koordinato ]

//generično na EA, ne tud pri DE
2. vsakega posameznika v populaciji oceniš z ocenjevano (fitness) funkcijo (zopet odvisno od problematike) [v zgornjem primeru boš za ocenitev izračunal vrednost, ki jo izbrana funkcija ob vhodu teh koordinat izpljune]

//DE specifično
3. izbereš posameznika X (kandidat) in j druge posameznike A, B, ... XYZ iz populacije (vsi morajo biti različni, gledaš na dimenzijo problema - koliko različnih podatkov vsebuje posameznik)
4. uporabiš verjetnost križanja, da izračunaš ali boš kandidatu X spremenil podatke iz izračunaš novo vrednost, če se križanje zgodi:
 enačba

enačba

za vsak potencialen podatek, ki ga posameznik nosi

4.1 možnost mutacije pri križanju - določen procent verjetnosti, da se podatki "popačijo" pri križanju

5. oceniš novega kandidata in primerjaš z oceno originala. Če je boljši ga nadomestiš
6. vse skupaj ponoviš za število posameznikov v populaciji

7. ponavljaš, dokler niso doseženi določeni pogoji (lahko je število "generacij" oz ponovitev, lahko da je najden najboljši kandidat...)

8. vrneš najboljšo oceno posameznika iz zadnje populacije


Plusi DE so, da ne potrebuje veliko generacij, da vrne dobre rezultate.
Moraš se zavedat, da je celoten koncept evolucije nedeterminističen, ker pomen da lahk zadevo 10-krat ponoviš in niti najmanj ni nujno, da boš dobil vsakič podoben, kaj šele enak rezultat.
No signiature, as you see..

Zgodovina sprememb…

  • spremenil: DaMachk ()

Ciklamen ::

Evo sem nekaj naklepal skup, ampak ni mi še jasno, kako je naš asistent dobil neke ogromne cifre, jaz pa dobivam malo manjše ^^

Da pojasnim: D = 5, CR = 0.5, F = 0.6, MAX_EVAL = 30000, POP_SIZE = 10

Asistent dobi: 3,17E-30 (njegovi rezultati gredo od 1,74E-53 do 3,95E+05 - res da je samo 7x zagnano, but you get my point)
Jaz dobim: 45,04542 (vsi rezultati gredo od 12,x do 74,x)

Nekaj mi pravi, da sem ga nekje zabiksal :)
- End of the Post ->

DaMachk ::

Kakšna je ocenjevalna funkcija?
Kaj predstavlja D?
Kako so predstavljeni posamezniki?
No signiature, as you see..

Ciklamen ::

Funkcija s katero ocenjujemo je Sphere (x^2)
D = dimenzija problem
Posamezniki so v 2d array-u takole predstavljeni:

for (int i = 0; i < pop_size; i++)
                    {
                        for (int j = 0; j < D; j++)
                        {
                            X[j] = randomX(-5.12, 5.12);
                            x[j, i] = X[j];
                        }
                        Fit[i] = Sphere(X, D);
                    }
- End of the Post ->

DaMachk ::

Ne vem kakšna je ocenjevalna funkcija... Lahko prilepiš kodo?
D = 5 pomeni torej da imate 5-dimenzionalno problematiko

Vam je asistent podal prostorsko omejitev med -5.12 in 5.12 ali ima drugačne omejitve?
No signiature, as you see..

Ciklamen ::

static double Sphere(double[] x, int D)
        {
            double s = 0;

            for (int i = 0; i < D; i++)
                s = s + Math.Pow(x[i], 2);

            return Math.Round(s, 5);
        }


Tole je ocenjevalna funkcija

Tako je.

Takšna je prostorska omejitev te funkcije, vsaka funkcija ima pač svojo omejitev :)
- End of the Post ->

DaMachk ::

Imaš mogoče napačno obrnjen pogoj pri ocenjevanju novega posameznika?
No signiature, as you see..


Vredno ogleda ...

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

java[grafi]

Oddelek: Programiranje
5603 (485) Wrop
»

[c#] Vstavljanje vrednosti v tabelo

Oddelek: Programiranje
111511 (1333) Cvenemir
»

c# QuadTree Indexing

Oddelek: Programiranje
7783 (605) RobertDev
»

[Python]Računanje polj

Oddelek: Programiranje
8788 (543) phyro
»

50 % ali manj? (strani: 1 2 3 )

Oddelek: Znanost in tehnologija
12710107 (7810) Jst

Več podobnih tem