Package abstrasy.pcfx

Source Code of abstrasy.pcfx.PCFx_populate_random

package abstrasy.pcfx;


import abstrasy.Node;

import abstrasy.interpreter.InterpreterException;
import abstrasy.interpreter.StdErrors;

/**
* Abstrasy Interpreter
*
* Copyright : Copyright (c) 2006-2012, Luc Bruninx.
*
* Concédée sous licence EUPL, version 1.1 uniquement (la «Licence»).
*
* Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
* Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
*
*   http://www.osor.eu/eupl
*
* Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous
* la Licence est distribué "en l’état", SANS GARANTIES OU CONDITIONS QUELLES
* QU’ELLES SOIENT, expresses ou implicites.
*
* Consultez la Licence pour les autorisations et les restrictions
* linguistiques spécifiques relevant de la Licence.
*
*
* @author Luc Bruninx
* @version 1.0
*/

public class PCFx_populate_random extends PCFx {
   
/*****
* Implémente nativement l'algorithme 'random populate' du script suivant:
* =======================================================================
*

(define 's [ 1 2 3 4 5 6 ])

(define 'p [])

(define 'i 6) # doit être plus petit que la factorielle de (length s).
(while{i} do{
  (define 'n (;s))
  (define 'pn [])
  (while{n} do{
    (define 'k (round (random (- (length n) 1) ) ) )
    (append! (@n k) to pn)
    (remove! k from n)
  })
  (if{not (value? pn in p)} then{
    (append! pn to p)
    (decr! i)
  })
})

(display "s = " s)
(display "p : " p)

=>

s = [1 2 3 4 5 6]
p : [
[3 6 2 4 5 1]
[1 4 5 6 2 3]
[4 2 3 5 6 1]
[1 5 4 6 3 2]
[1 6 3 4 5 2]
[3 1 4 6 2 5]
]

Ready...

*
* On un tableau de génomes aléatoires obtenus à partir du génome original.
*
*****/

   
    public PCFx_populate_random() {
    }

    private final static boolean isIn(Node a, Node liste) throws Exception{
        for(int i=0;i<liste.size();)
            if(Node.equalsNodes(a,liste.elementAt(i++)))
                return true;
        return false;
    }
   
   
    /**
     * eval
     *
     * @param startAt Node
     * @return Node
     * @throws Exception
     * @todo Implémenter cette méthode abstrasy.PCFx
     */
    public Node eval(Node startAt) throws Exception {
        /*
         * formes: (populate-random [liste] individus)
         *
         */
        startAt.isGoodArgsCnt(2,3);
        Node p1 = startAt.getSubNode(1, Node.TYPE_CLIST);
        int individus = startAt.size()==3 ? (int)startAt.getSubNode(2, Node.TYPE_NUMBER).getNumber() : p1.size();
        double max = Math.max(1,p1.size());
        double i=(max-1);
        while(i>1)
            max=max*i--;
        //System.out.println("*"+max+" ,*"+individus);
        if(individus<=0 || individus>max)
            throw new InterpreterException(StdErrors.Out_of_range);
       
        Node p2 = Node.createCList();
        for(int j=0;j<p1.size();j++){
            p2.addElement(p1.elementAt(j).secure());
        }
       
        Node p = Node.createCList();
       
        while(individus>0){
            Node n = p2.select(0, p2.size());
            Node pn= Node.createCList();
            while(n.size()>0){
                int k = (int)Math.round(Math.random()*(n.size()-1));
                pn.addElement(n.elementAt(k));
                n.removeElementAt(k);
            }
            p.addElement(pn);
            individus--;
        }
        return p;

    }

}
TOP

Related Classes of abstrasy.pcfx.PCFx_populate_random

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.