⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplemalteadaim.java~

📁 Java遗传算法库
💻 JAVA~
字号:
/*
 * MalteadaIM2.java
 *
 * Created on 06 July 2002, 23:00
 */

package jaga.pj.circuits.control;

import jaga.Queue;
import jaga.Genotype;
import jaga.SampleData;

import jaga.evolve.Evolver;
import jaga.deploy.Deployment;
import jaga.experiment.Experiment;

import jaga.control.StandardInteractionModel;

import jaga.pj.circuits.SimulatorDeployment;
import jaga.pj.circuits.SimulatorLogicElement;
import jaga.pj.circuits.CircuitsLib;
import jaga.pj.circuits.CircuitMapping;
import jaga.pj.circuits.fpgaft.SimulatorFaultyCircuit;

import java.util.Vector;

/**
 *
 * @author  Michael Garvie
 * @version 
 */
public class SimpleMalteadaIM extends StandardInteractionModel
{
    SimulatorFaultyCircuit circuit;
    CircuitMapping mapping;
    final int faultTypes = 2;
    int currFPos = -1;
    int faultGens = 0;
    
    Queue lastAdded = new Queue();
    Vector lastElements = new Vector();
    int viscocity = 100;

    /** Creates new MalteadaIM2 */
    public SimpleMalteadaIM (Evolver evo,CircuitMapping mapping,SimulatorDeployment dep,Experiment exp)
    {
        super( evo, dep, exp );
        circuit = ( SimulatorFaultyCircuit ) dep.getCircuit();
        this.mapping = mapping;
    }

    public SimpleMalteadaIM (Evolver evo,CircuitMapping mapping,SimulatorDeployment dep,Experiment exp,int visco)
    {
        this( evo, mapping, dep, exp );
        viscocity = visco;
    }
    
    public double[] evaluate( Genotype[] inds )
    {
        Genotype ind = inds[ 0 ];
        
        deployment.program( ind );
        if( currFPos >= 0 )
        {
            circuit.setFault( currFPos, currFPos % faultTypes );
        }
        SampleData[] input = experiment.generateInput( inputSampleSeparation );
        SampleData[] output = deployment.run( input );
        double fitness = experiment.getFitness( input, output );
        houseWork( ind, fitness );
        double[] rv = { fitness };
        if( currFPos >= 0 )
        {
            circuit.setFault( currFPos, jaga.pj.circuits.fpgaft.FTLib.NOFAULT );
        }
        return rv;
    }
    
    public void evolve()
    {
        if( faultGens == viscocity )
        {
            if( lastAdded.size() > 0 )
            {
                currFPos = ( ( Integer ) lastAdded.deq() ).intValue();
                faultGens = 0;
            }else
            {
                currFPos = -1;
                faultGens = 0;
            }
            debug("Curr FPos now " + currFPos + " Q is " + lastAdded );
        }
        faultGens++;
        SimulatorLogicElement[][] inelout = mapping.map( fittestIndividual );
        Vector els = CircuitsLib.addConnectedGates( inelout[ 1 ] );
        Vector elsNrs = new Vector();
        for( int el = 0; el < els.size(); el++ )
        {
            Integer elPos = new Integer( jaga.ESLib.indexOf( els.get( el ), inelout[ 2 ] ) );
            elsNrs.add( elPos );
            if( !lastElements.contains( elPos ) && !lastAdded.contains( elPos ) )
            {
                debug("adding to lastAdded: " + elPos );
                lastAdded.enq( elPos );
            }
        }
        lastElements = elsNrs;
        
        super.evolve();
    }
    
    private void debug( Object o )
    {
        System.out.println( o );
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -