Sök       Avancerad sökning

   
5 av 5
5
Genetisk programmering och ID
Postade: 16 Augusti 2010 09:15 - —   [ Ignorera ]   [ # 61 ]  
Veteran
RankRankRankRank
Antal poster:  1429
Gick med  2007-08-02

Följande är ett svar på ett inlägg i tråden om Theobalds argument för gemensamt ursprung
http://www.credoakademin.nu/index.php/forums/viewreply/25690/

tirian, #319:

Det är nog mitt fel att debatten i den tråden dött, men jag tycker det är svårt att få fram det jag som programmerare tycker är enkla sanningar. Och jag har nog gett upp lite att det ska gå, tyvärr.
Jag kan bara här lyfta fram vissa saker som du och jag kanske är oense om.
Principiellt ser jag inte att den genetiska algoritmen är annorlunda från andra sök eller optimering algoritmer. Det enda som skiljer den är på vilket sätt man tar fram kandidater som ska väljas ut. Men samma urvals mekanism går att använda i en simpel quicksort algoritm, om man skulle vilja sortera i någon slags ordning från bättre till sämre individer. Så det krävs lika ‘mycket’ eller ‘lite’ kunskap om problemet vid en sådan enkel sortering.
Dessutom är selekteringen matematiskt formaliserad, något som man inte kan beskylla det naturliga urvalet för att vara.
Dessutom ingår alltid genetiska algoritmer i ett designat program med både mål och syfte. Och ett genetiskt program kommer endast generera de resultat programmet är designat för.

Nils G - 10 Augusti 2010 05:02 -

Nej, vi är definitivt inte överens och om du vill kan vi fortsätta diskussionen i tråden om Genetisk Programmering.

tirian - 10 Augusti 2010 05:59 -

Visst är det lockande, men jag vet inte om vi förstår varandra tillräckligt bra för att kunna föra en bra debatt om det. Som programmerare känner jag viss frustration över att enkla sanningar om programmering inte kan förmedlas på ett enkelt och lättförståeligt sätt. Vi skulle behöva sitta ner och skriva ett genetiskt program tillsammans, det skulle säkert göra saker enklare att förstå.
.

Först vill jag nämna att även jag har sysslat en hel del med programmering - många år av främst assemblerprogrammering och även som ansvarig för en grupp om fem programmerare. Jag har dock inte skrivit i Java eller C++ eller andra objektorienterade språk. Men det bekymrar mig att du lägger så stor vikt vid programmering när det snarare är systemeringskunskaper som krävs. Vad vi bör diskutera är algoritmer och inte kodning och annat implementeringsnära. Jag har noterat att du ett flertal gånger kommit in på helt irrelevanta implementeringsaspekter och jag har tagit upp algoritmdiskussionen flera gånger men har inte fått särkilt mycket gehör för det. Sitta ner och koda algoritmerna kommer inte att ge något av intresse i sammanhanget.

—-
Angående ditt påstående:
Jag har försökt (flera gånger) att påpeka att det finns väsentliga skillnader mellan genetisk programmering och mikroevolution. En sådan är att mikroevolution påverkar själva koden medan genetiska program har en kod som är statisk och som (med avsikt) inte påverkas av förändringarna.
.

Nils G - 10 Augusti 2010 05:02 -

Hmm, såvitt jag ser så nämner du ordet ‘mikroevolution’ först i inlägg 41 men då i ett annat sammanhang så  jag förstår inte vad jag missat. Inlägg 29, 32 och 39 vänder sig dessutom till andra än till mig så de har jag nog inte läst så noga - jag har haft nog med att bemöta dina inlägg till mig.

Först en liten förvirring från min sida. Det skulle ha stått evolution och inte mikroevolution. Ursäkta om det gjorde det hela svårt att läsa. Sen ser jag även att du har rätt att de flesta inläggen om självmodifierande kod inte är riktat till dig, så då förstår jag bättre att du missat det.

Så det jag ville ha sagt är att ett exempel på en väsentlig skillnad mellan genetisk programmering och evolution är att evolution lagrar förändringar i DNA koden som innehåller både data och instruktioner. Genetiska program å andra sidan lagrar förändringar i en separat minnesdel som är medvetet skild från den del som innehåller själva instruktionerna för vad som ska göras. Inom programmering kan man iofs göra program som modifierar instruktioner också (självmodifierande program), men inom genetisk programmering används inte den tekniken för att det skulle leda till att instruktionerna hela tiden skulle sluta fungera. Du kan inte slumpmässigt börja ändra de instruktioner som beskriver den genetiska algoritmen utan att riskera att den genetiska algoritmen förstörs.


Jo det är en viss skillnad men jag ser inte att den är principiell. Det genetiska programmet skulle också kunna lagra koden bland data. Hypotetiskt skulle detta kunna medföra att koden förbättras men som du säger skulle resultatet säkert bli att det totala prestanda skulle försämras avsevärt. Om man vill producera lösningar så blir det en ineffektiv metod. På mycket lång sikt skulle det kanske vara så att det är effektivt att lägga koden bland data eftersom det ger möjlighet att koden förbättras och det är kanske anledningen till att det är så det är för biologisk evolution.

Gunnar

Profil
 
 
Postade: 17 Augusti 2010 08:20 - —   [ Ignorera ]   [ # 62 ]  
Veteran
RankRankRankRank
Antal poster:  1458
Gick med  2007-06-13
Nils G - 16 Augusti 2010 07:15 -

Så det jag ville ha sagt är att ett exempel på en väsentlig skillnad mellan genetisk programmering och evolution är att evolution lagrar förändringar i DNA koden som innehåller både data och instruktioner. Genetiska program å andra sidan lagrar förändringar i en separat minnesdel som är medvetet skild från den del som innehåller själva instruktionerna för vad som ska göras. Inom programmering kan man iofs göra program som modifierar instruktioner också (självmodifierande program), men inom genetisk programmering används inte den tekniken för att det skulle leda till att instruktionerna hela tiden skulle sluta fungera. Du kan inte slumpmässigt börja ändra de instruktioner som beskriver den genetiska algoritmen utan att riskera att den genetiska algoritmen förstörs.

Jo det är en viss skillnad men jag ser inte att den är principiell. Det genetiska programmet skulle också kunna lagra koden bland data.

Fast det är faktiskt praktiskt taget stört omöjligt. Eftersom förändringarna sker slumpmässigt och detta skulle innebära slumpmässiga förändringar av instruktionerna eller data (om du förutsätter att du inte vet vad som modifieras) skulle inte ett sådant program fungera. Du måste skydda den grundläggande algoritmen och de grundläggande instruktionerna från att skadas av de förändringar som sker. Risken är försumbar att du efter ett antal generationer har ett fungerande program om du tillåter slumpen att ändra vad som helst.

Nils G - 16 Augusti 2010 07:15 -

Hypotetiskt skulle detta kunna medföra att koden förbättras men som du säger skulle resultatet säkert bli att det totala prestanda skulle försämras avsevärt. Om man vill producera lösningar så blir det en ineffektiv metod. På mycket lång sikt skulle det kanske vara så att det är effektivt att lägga koden bland data eftersom det ger möjlighet att koden förbättras och det är kanske anledningen till att det är så det är för biologisk evolution.

Ska vi börja prata sannolikhet så är sannolikheten att en ny instruktion som till exempel ändrar hur urvalet sker lika med noll. Om vi går tillbaka till handelseresande problemet så är det följande kod som gör att den sorteras i rätt ‘fitness’ ordning:

/**
  * Returns the total distance traveled for the order of cities specified by this chromosome.
  */
  public double getFitness() {
      if (m_fitness > 0.0) return m_fitness;

      double i_fitness = 0.0;

      for (int i = 0; i < m_genes.size(); i++) {
        TSPGene g1 = (TSPGene) m_genes.get(i);
        TSPGene g2;

        if (i == (m_genes.size() - 1))
          g2 = (TSPGene) m_genes.get(0);
        else
          g2 = (TSPGene) m_genes.get(i + 1);

        i_fitness += calcDistance(g1.getX(), g1.getY(), g2.getX(), g2.getY());
      }

      m_fitness = i_fitness;

      return m_fitness;
  }
  }

Hur hade du tänkt att denna kod slumpmässigt skulle kunna förändras?

En ändring bara förstör, utan det som krävs är ett antal väl koordinerade ändringar som tillsammans förbättrar koden. Det går inte att använda mutationer på koden för att förbättra den i små steg. Utan det ska till en massa samtidiga förändringar.

Du kan ju förklara hur denna kod stegvis går från ovanstående till en fitness metod som även tar hänsyn till priset på resan där varje steg ska vara liten och utgöra en förbättring av koden. Det går bara inte, eller hur!

 Signatur 

Det är bättre att veta att man tror, än tro att man vet!

Profil
 
 
Postade: 17 Augusti 2010 12:40 - —   [ Ignorera ]   [ # 63 ]  
Veteran
RankRankRankRank
Antal poster:  1429
Gick med  2007-08-02
tirian - 17 Augusti 2010 06:20 -

...
Du kan ju förklara hur denna kod stegvis går från ovanstående till en fitness metod som även tar hänsyn till priset på resan där varje steg ska vara liten och utgöra en förbättring av koden. Det går bara inte, eller hur!

Observera att jag var försiktig när jag uttalade mig. “mycket lång sikt”, “kanske”. Jag vet inte om det överhuvud taget går att modifiera koden till det bättre med genetiska metoder men jag skulle inte bli förvånad om någon kunde visa att man kan det om man får tillräcklig tid (=antal försök) på sig. Nu var det här inte något centralt eller viktigt resonemang. Jag är mer intresserad av din kommentar på andra delar av mitt senaste inlägg.

Gunnar

Profil
 
 
Postade: 17 Augusti 2010 02:52 - —   [ Ignorera ]   [ # 64 ]  
Veteran
RankRankRankRank
Antal poster:  1458
Gick med  2007-06-13
Nils G - 17 Augusti 2010 10:40 -
tirian - 17 Augusti 2010 06:20 -

Du kan ju förklara hur denna kod stegvis går från ovanstående till en fitness metod som även tar hänsyn till priset på resan där varje steg ska vara liten och utgöra en förbättring av koden. Det går bara inte, eller hur!

Observera att jag var försiktig när jag uttalade mig. “mycket lång sikt”, “kanske”. Jag vet inte om det överhuvud taget går att modifiera koden till det bättre med genetiska metoder men jag skulle inte bli förvånad om någon kunde visa att man kan det om man får tillräcklig tid (=antal försök) på sig. Nu var det här inte något centralt eller viktigt resonemang. Jag är mer intresserad av din kommentar på andra delar av mitt senaste inlägg.

Men om du kan assembler programmering måste du känna till problematiken med att skriva över fel delar av minnet. Och det är varken kul eller produktivt. Har varit med om en hel del ‘otrevliga’ buggar som har med att man skriver över fel delar i minnet. Dessutom borde du enkelt förstå att varje generation som påverkar instruktionerna kommer i princip alltid ha ‘dödlig’ utgång. Även om man skrev om fitness processen i assembler så skulle det krävas multipla och samtidiga mutationer för att skapa någon ny information. Och detta antar jag att du inte tror evolution pysslar med, det är helt enkelt för osannolikt. Så att genetisk programmering och evolution har olika sätt att hantera hur kod och data lagras är faktiskt rätt relevant och en stor skillnad.

Men vilka delar tänkte du på?

Om det har med själva algoritmen att göra undrar jag vad som egentligen är specifikt med genetisk programmering. I.e. vad är det du påstår kan åstadkommas med genetisk programmering som man inte kan åstadkomma med andra egenpåhittade algoritmer (med eller utan slumpfaktorer)? Hur bevisar detta att det skulle vara ‘algoritmens’ förtjänst om något användbart kom ur ett sådant program.

Eller för att upprepa algoritmen:

1. Välj ut en initial population av individer.
2. Upprepa till man är nöjd:
- 2.1. Skapa ny avkomma. Antingen används den genetiska algoritmen för detta, eller så gör vi något egenpåhittat här som är generellt eller lösningsspecifikt.
- 2.2. Bilda en ny generation som summan av den gamla generationen plus avkomman. Generellt tillämpbar. Enkel.
- 2.3. Utvärdera lämpligheten för varje ny individ i avkomman genom att skapa ett godhetstal för varjae individ . Specifik för varje måluppfyllelse och har i princip inget med genetisk programmering att göra. Det kan vara en simpel compare funktion som används när man sorterar en lista.
- 2.4. Tag bort de sämst rankade individerna i den nya generationen. Generell och enkel och kan kombineras med 2.4. Har heller inget egentligen med genetisk programmering att göra utan hur man i programmet jämför två saker av samma typ.
- 2.5. Jämför den bäst rankade individens godhetstal med målet. Fortsätt om måluppfyllelsen inte är tillräckligt god. Generell och enkel och inget genetisk programmeringsspecifikt.

Så det enda steget som eventuellt är unikt för ett genetiskt program är hur avkomman skapas. Men även det steget kan göras på annat sätt, antingen generellt eller lösningsspecifikt.

Så vad tillför genetisk programmering rent principiellt till vad som kan lösas eller skapas med hjälp av ett dataprogram?

Och hur skulle genetisk programmering (återigen principiellt) skilja sig från om man valde en annat sätt (algoritm) för att lösa 2.1?

På vilket sätt menar du att genetisk programmering inte är bättre att jämföra med avel och andra mer målstyrda typer av förändringar, där man har en medveten strategi, ett mål och syfte?

Du får ursäkta om du känner att du redan svarat på allt detta, men jag behöver upprepa lite för att komma ihåg var i debatten vi var.

 Signatur 

Det är bättre att veta att man tror, än tro att man vet!

Profil
 
 
Postade: 25 Augusti 2010 02:05 - —   [ Ignorera ]   [ # 65 ]  
Junior
RankRank
Antal poster:  55
Gick med  2010-03-28
tirian - 17 Augusti 2010 06:20 -

Du kan ju förklara hur denna kod stegvis går från ovanstående till en fitness metod som även tar hänsyn till priset på resan där varje steg ska vara liten och utgöra en förbättring av koden. Det går bara inte, eller hur!

Vad är vitsen med detta påstående? Du är väl med på att vi kan göra en körning där koden förr eller senare kommer bli bättre? (Och nu snackar jag inte om praktiska tidsramar)

Profil
 
 
   
5 av 5
5
 
© 2006-2011 CredoAkademin, Rehnsgatan 20, 113 57 Stockholm. Tfn 08-545 494 70