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

📄 cooperativeobservation.java

📁 MASON代表多主体邻里或网络仿真(Multi-Agent Simulator of Neighborhoods or Networks)。它是乔治梅森大学用Java开发的离散事件多主体仿真核心库
💻 JAVA
字号:
package sim.app.cto;import sim.field.continuous.*;import sim.engine.*;import sim.util.*;import ec.util.*;import java.io.*;public /*strictfp*/ class CooperativeObservation extends SimState    {    public static final double XMIN = 0;    public static final double XMAX = 400;    public static final double YMIN = 0;    public static final double YMAX = 400;        public static final double DIAMETER = 8;        public static final int NUM_TARGETS = 40;    public static final int NUM_AGENTS = 10;    Double2D[] agentPos;    Double2D[] targetPos;    public Continuous2D environment = null;    KMeansEngine kMeansEngine;    /** Creates a CooperativeObservation simulation with the given random number seed. */    public CooperativeObservation(long seed)        {        super(new MersenneTwisterFast(seed), new Schedule(2));        }    boolean conflict( final Object agent1, final Double2D a, final Object agent2, final Double2D b )        {        if( ( ( a.x > b.x && a.x < b.x+DIAMETER ) ||              ( a.x+DIAMETER > b.x && a.x+DIAMETER < b.x+DIAMETER ) ) &&            ( ( a.y > b.y && a.y < b.y+DIAMETER ) ||              ( a.y+DIAMETER > b.y && a.y+DIAMETER < b.y+DIAMETER ) ) )            {            return true;            }        return false;        }    boolean acceptablePosition( final Object agent, final Double2D location )        {        if( location.x < DIAMETER/2 || location.x > (XMAX-XMIN)/*environment.getXSize()*/-DIAMETER/2 ||            location.y < DIAMETER/2 || location.y > (YMAX-YMIN)/*environment.getYSize()*/-DIAMETER/2 )            return false;        Bag misteriousObjects = environment.getObjectsWithinDistance( location, /*Strict*/Math.max( 2*DIAMETER, 2*DIAMETER ) );        if( misteriousObjects != null )            {            for( int i = 0 ; i < misteriousObjects.numObjs ; i++ )                {                if( misteriousObjects.objs[i] != null && misteriousObjects.objs[i] != agent )                    {                    Object ta = (CTOAgent)(misteriousObjects.objs[i]);                    if( conflict( agent, location, ta, environment.getObjectLocation(ta) ) )                        return false;                    }                }            }        return true;        }    public void start()        {        super.start();  // clear out the schedule        agentPos = new Double2D[ NUM_AGENTS ];        for( int i = 0 ; i < NUM_AGENTS ; i++ )            agentPos[i] = new Double2D();        targetPos = new Double2D[ NUM_TARGETS ];        for( int i = 0 ; i < NUM_TARGETS ; i++ )            targetPos[i] = new Double2D();        kMeansEngine = new KMeansEngine( this );        environment = new Continuous2D(8.0, XMAX-XMIN, YMAX-YMIN);        // Schedule the agents -- we could instead use a RandomSequence, which would be faster,        // but this is a good test of the scheduler        for(int x=0;x<NUM_AGENTS+NUM_TARGETS;x++)            {            Double2D loc = null;            Int2D pos = null;            CTOAgent agent = null;            int times = 0;            do                {                loc = new Double2D( random.nextDouble()*(XMAX-XMIN-DIAMETER)+XMIN+DIAMETER/2,                                    random.nextDouble()*(YMAX-YMIN-DIAMETER)+YMIN+DIAMETER/2 );                if( x < NUM_AGENTS )                    {                    agent = new CTOAgent( loc, CTOAgent.AGENT, "Agent"+x );                    }                else                    {                    agent = new CTOAgent( loc, CTOAgent.TARGET, "Target"+(x-NUM_AGENTS) );                    }                times++;                if( times == 1000 )                    {                    System.out.println( "Cannot place agents. Exiting...." );                    System.exit(1);                    }                } while( !acceptablePosition( agent, loc ) );            environment.setObjectLocation(agent,loc);            schedule.scheduleRepeating(agent);            }        }    public static void main(String[] args)        {        doLoop(CooperativeObservation.class, args);        System.exit(0);        }        }

⌨️ 快捷键说明

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