Newsgroup: it.comp.ia
Titolo: alcune "gnammy" domande...

Sto seguendo il progetto Gnammy e ho alcuni dubbi che mi attenagliano:
A)si è detto che lo gnammy sa solo quello che gli è stato detto e quello che
ha scoperto
ma:
    1) la prima generazione di gnamy che fa nasce "imparata"?
    2) se non nasce "imparata" chi glielo spiega il fatto delle pizze??
B) lo Gnammy di suo ha:
        -memoria/conoscenza
        -vista
        -parla
        -mangia
        -si riproduce
        -muore
        1) ma come viene scelto il patner giusto? e da prevedere un indice
di "salute/figosità"?
        2) il mondo gnammy funziona x generazioni tipo AG oppure ogni gnammy
è autonomo e ha una sua longevità? e se è così la longevità e correlata a
cosa?
        3) quali leggi sono implicite nel mondo ganmmy e quali verranno
scelte dall'evoluzione?
        4) lo gnammy è notturno o diurno?
        5) oppure creiamo lo Gnammy neutro e poi sceglie lui cosa mancia,
cosa gli piace, cosa fare da grande e con chi andare a letto? ma se è così
qule è il "core" di regole da fissare?
C) come è il mondo gnammy?quali sono le sueleggi implicite??
grazie scusate lamarea di domande ma mi serve per concretizzare un pò l'idea
di cosa è lo "Gnammy project" xchè leggendo i vari post ho visto una marea
di idee e buoni suggerimenti ma non trovo le basi su cui il tutto poggia...
=)
grazie ancora
Davide C.
--

di idee e buoni suggerimenti ma non trovo le basi su cui il tutto poggia...
Vuoi l'idea concretizzata?
Ecco qui le basi, sarebbe meglio farlo in C, te lo consiglio.... ;-)
Ok non e' molto avanzato ma come "Microbi Generator" va col turbo........
Ciao
Davide U.
;****** Simulazione di microbi
  push ax
  push bx
  push cx
  push dx
  push si
  push di
  push bp
  push ds
  push es
  push ss
  pushf
  jmp start
colcibo equ    1            ;colore del cibo
micpart equ    1000         ;numero microbi di partenza
maxmic  equ     1800         ;numero massimo di microbi contemporaneamente
partcib equ     10000        ;quantita di cibo di partenza
enepart equ     2000         ;energia di partenza di ogni microbo
enedup  equ     400          ;soglia energetica per la duplicazione
valcib  equ     10           ;valore energetico del cibo
maxg equ     8            ;numero massimo di geni per ogni microbo
gene    dw      30000 dup(0) ;max 2000 organismi con 16 geni ciascuno
data_4e dw      3Eh             ;serve per il generatore random
data_5e dw      40h             ;serve per il generatore random
data_9  dw      8405h           ;serve per il generatore random
dir     dw      1,1,-1,-1,-1,1,1,-1,1,0,0,1,-1,0,0,-1       ;direzioni
start:  mov cx,micpart          ;creazione microbi di partenza
carica:         push cx
  mov bp,cx
  dec bp
                mov ax,40  ;generazione posizioni random
  call XRND               ;di partenza (x-y)
  push ax
  mov ax,40
  call XRND
  pop bx                  ;ottengo AX=random BX=random
  shl bp,1                ;serve per puntare
  shl bp,1                ;all'array gene
  shl bp,1
  shl bp,1
  shl bp,1
  mov gene[bp+20],160     ;era bx  <- x (vedi sopra)
                mov gene[bp+22],100     ;era ax  <- y (vedi sopra)
  mov gene[bp+24],enepart ;<-energia di partenza
  mov ax,8
  call XRND
  add ax,9
  xchg ah,al
  mov gene[bp+26],ax
  xor si,si               ;creazione random di 8 geni
xgene:          push si                 ;per il movimento (2Byte x gene)
  mov ax,8
  call XRND
  pop si
                mov gene[bp+si],ax
  inc si
  inc si
  cmp si,16
  jne xgene
  pop cx
  loop carica             ;FINE creazione microbi di partenza
  mov ah,0  ; setta la VGA 320x200 256 colori
                mov al,13h
                int 10h
  mov ax,0A000h  ; setta come memoria video A000h
  mov es,ax               ; segmento ES come video
               ;CIBO DI PARTENZA
  mov cx,partcib
cibo:  push cx
  mov ax,320
  call XRND
                push ax
  mov ax,200
  call XRND
  pop cx
  mov bx,ax
  mov ah,colcibo
  call PSET
  pop cx
  loop cibo
;------------------------ programma
principale -------------------------------
  xor si,si
  mov cx,micpart  ;numero di microbi di partenza
ciclo:  inc si   ;incrementa puntatore al microbo
  push cx
  push si
  dec si
                shl si,1
  shl si,1
  shl si,1
  shl si,1
  shl si,1
  mov cx,gene[si+20]
  mov gene[si+16],cx   ;copia vecchia posizione x microbo
  mov bx,gene[si+22]
  mov gene[si+18],bx
  cmp gene[si+24],0
  je MDEAD
  cmp gene[si+24],enedup
  jl cont0
  call CREA
cont0:  dec gene[si+24]
  call NEWPOS
  call BONUS
  call CTRVID  ;controlli limiti video e disegna
  jmp cont2
MDEAD:  call DEAD
cont2:  pop si
  pop cx
  in al,60h               ;
  cmp al,1                ;
  je fine                 ;controlla se tasto esc e' premuto
  cmp si,cx
                jl cont
                push cx      ;
                call CIBO2   ;
                pop cx       ;
  xor si,si
cont:  cmp cx,0
                jne ciclo
  popf
  pop ss
  pop es
  pop ds
  pop bp
  pop di
  pop si
  pop dx
  pop cx
  pop bx
  pop ax
fine:  mov ax,4C00h
                int 21h
;--------------------------
subroutines --------------------------------------
                ;DUPLICAZIONE MICROBO E DNA
CREA:           push si
  push bp
  mov bx,sp
  mov di,[bx+8]
  inc di
  cmp di,maxmic
  jg FINECR
  dec di
  shl di,1
  shl di,1
  shl di,1
  shl di,1
  shl di,1
  mov cx,0
  shr gene[si+24],1
copiaC:  mov ax,gene[si]
  mov gene[di],ax
  inc si
  inc si
  inc di
  inc di
  inc cx
  inc cx
                cmp cx,32
  jne copiac
  mov ax,8
  call XRND     ;MUTAZIONE GENETICA DI UN GENE
  shl ax,1
  sub di,30
  mov bp,di
  mov si,ax
  shr ax,1
  mov gene[bp+si],ax
  mov bx,sp
                inc [bx+8]
FINECR:         pop bp
  pop si
  ret
DEAD:           push si
  mov ah,colcibo  ;TERMINA un microbo se morto
  call PSET               ;e lo trasforma in cibo
  pop di
  mov bx,sp
  mov si,[bx+4]
  dec si
  shl si,1
  shl si,1
  shl si,1
  shl si,1
  shl si,1
  mov cx,0
copia:  mov ax,gene[si]
  mov gene[di],ax
  inc si
  inc si
  inc di
  inc di
  inc cx
  inc cx
                cmp cx,32
  jne copia
  mov bx,sp
                dec [bx+4]
  ret
CIBO2:  mov cx,10
cibox:  push cx
  mov ax,50
  call XRND
                push ax
  mov ax,50
  call XRND
  mov bx,ax
  pop cx
  mov ah,colcibo
  add bx,70
  add cx,20
  call PSET
  pop cx
  loop cibox
  ret
BONUS:   push si
  push bp
  mov cx,gene[si+20]
  mov bx,gene[si+22]
  mov dx,di
  call POINT
  cmp bh,colcibo
  mov cx,1
  jne NOCIBO
  push ax
  push dx
                mov ax,8
  CALL XRND      ;AGGIORNAMENTO CASUALE DI UN GENE
  shl ax,1       ;CON LA DIREZIONE CON CUI HA TROVATO CIBO
  mov si,ax
  pop bp
  pop ax
  mov gene[bp+si],ax
  xor cx,cx
NOCIBO:  pop bp
  pop si
  cmp cx,1
        je NOENE
  add gene[si+24],valcib
NOENE:  ret
                ;PRENDE A CASO UNO DEGLI 8 GENI DI MOVIM. E AGG. POS.
NEWPOS:  push si
  push bp
  mov bp,si
  mov di,si
  mov ax,8
  call XRND
  shl ax,1
  mov si,ax
  mov bx,gene[bp+si]
  mov ax,bx
  shl bx,1
  shl bx,1
  mov si,bx
  mov cx,dir[si]
  mov bx,dir[si+2]
  pop bp
  pop si
  add gene[si+20],cx
  add gene[si+22],bx
         ret
                ;CONTROLLO LIMITI VIDEO E AGGIORNA POSIZIONI
CTRVID:  mov bx,gene[si+22]      ;
                cmp bx,0                ;confronta y se >= 0
  jge cont3               ;se minore assegna y = 199
  mov bx,199              ;altrimenti salta
                jmp cont4               ;
cont3:  cmp bx,199              ;controlla y se <= 199
  jle cont4               ;se maggiore assgnaa y = 0
  xor bx,bx               ;
cont4:  mov gene[si+22],bx      ;assegna nuovo valore y
                mov cx,gene[si+20]      ;
                cmp cx,0                ;confronta x se >= 0
  jge cont5               ;se minore assgena x = 319
  mov cx,319              ;altrimenti salta
  jmp cont6               ;
cont5:  cmp cx,319              ;controlla x se <= 319
  jle cont6               ;se maggiore assegna x 0
  xor cx,cx               ;
cont6:          mov gene[si+20],cx      ;assegna nuovo valore x
;                mov ax,gene[si+26];
;                cmp ah,9          ;
;                je  contzz        ;
  push si
  mov cx,gene[si+16]
  mov bx,gene[si+18]
                mov ah,0
  call PSET
                pop si
contzz:  mov cx,gene[si+20]
  mov bx,gene[si+22]
  mov ax,gene[si+26]
  call PSET
  ret
                ;RILEVA UN PIXEL IN GRAFICA VGA 320x200
  ;cx<-x  bx<-y  bh->col  lavoro=si,di,bp
POINT:  mov     si,cx
                xchg    bh,bl
                add     si,bx
                shr     bx,1
                shr     bx,1
                add     si,bx
                mov     bh,es:[si]
                ret
                ;DISEGNA UN PIXEL IN GRAFICA VGA 320x200
        ;cx<-x  bx<-y  ah<-col  lavoro=si,di,bp
PSET:           mov     si,cx
                xchg    bh,bl
                add     si,bx
                shr     bx,1
                shr     bx,1
                add     si,bx
                mov     es:[si],ah
                ret
               ;FUNZIONE RANDOM ->  ritorna in AX il valore RND
XRND:  push    ax
  mov     ax,ds:data_4e                   ; (0000:003E=70h)
  mov     bx,ds:data_5e                   ; (0000:0040=2089h)
  mov     cx,ax
  mul     cs:data_9                       ; (6A8F:0706=8405h) ax = data * ax
  shl     cx,1                            ; Shift w/zeros fill
  shl     cx,1                            ; Shift w/zeros fill
  shl     cx,1                            ; Shift w/zeros fill
  add     ch,cl
  add     dx,cx
  add     dx,bx
  shl     bx,1                            ; Shift w/zeros fill
  shl     bx,1                            ; Shift w/zeros fill
  add     dx,bx
  add     dh,bl
  mov     cl,5
  shl     bx,cl                           ; Shift w/zeros fill
  add     dh,bl
  add     ax,1
  adc     dx,0
  mov     data_4e,ax   ; (0000:003E=70h)
  mov     data_5e,dx   ; (0000:0040=2089h)
  xor     ax,ax                           ; Zero register
  pop bx
  or      bx,bx                           ; Zero ?
  jz      loc_ret_59                      ; Jump if zero
  xchg    ax,dx
  div     bx                              ; ax,dx rem=dx:ax/reg
  xchg    ax,dx    ; ax=valore RND
loc_ret_59: ret

di idee e buoni suggerimenti ma non trovo le basi su cui il tutto poggia...
Eh, lo so, ma presto nascera' il sito per metter un po' di ordine :-)
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

-gli ostacoli sono invalicabili
E se allo Gnammy gli mettiamo un scanner che succede???
Attendo vostri commenti.
Ciao.

Attendo vostri commenti.
Di un area estesa ? secondo me incasina solo le cose, io credo che la
vista ci voglia, ma che basti limitarla a una sola cerlla limitrofa
(quindi in tot 4 celle da esaminare (considerando che muove solo in
orizz e vert)


Scusate, questo programma in assembler non
c'entra nulla con gli Gnammy  :-)
e' sono una banale simulazione di Alife...
Ciao.