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

📄 hexabugs.java

📁 MASON代表多主体邻里或网络仿真(Multi-Agent Simulator of Neighborhoods or Networks)。它是乔治梅森大学用Java开发的离散事件多主体仿真核心库
💻 JAVA
字号:
package sim.app.hexabugs;import sim.engine.*;import sim.util.*;import sim.field.grid.*;import ec.util.*;import java.io.*;public /*strictfp*/ class HexaBugs extends SimState    {    public double minIdealTemp = 17000;    public double maxIdealTemp = 31000;    public double minOutputHeat = 6000;    public double maxOutputHeat = 10000;    public double evaporationRate = 0.993;    public double diffusionRate = 1.0;    public static final double MAX_HEAT = 32000;    public double randomMovementProbability = 0.1;    public int gridHeight = 100;    public int gridWidth = 100;    public int bugCount = 100;    HexaBug[] bugs;    public double getMinimumIdealTemperature() { return minIdealTemp; }    public void setMinimumIdealTemperature( double temp ) { if( temp <= maxIdealTemp ) minIdealTemp = temp; }    public double getMaximumIdealTemperature() { return maxIdealTemp; }    public void setMaximumIdealTemperature( double temp ) { if( temp >= minIdealTemp ) maxIdealTemp = temp; }    public double getMinimumOutputHeat() { return minOutputHeat; }    public void setMinimumOutputHeat( double temp ) { if( temp <= maxOutputHeat ) minOutputHeat = temp; }    public double getMaximumOutputHeat() { return maxOutputHeat; }    public void setMaximumOutputHeat( double temp ) { if( temp >= minOutputHeat ) maxOutputHeat = temp; }    public Object domEvaporationConstant() { return new Interval(0.0,1.0); }    public double getEvaporationConstant() { return evaporationRate; }    public void setEvaporationConstant( double temp ) { if( temp >= 0 && temp <= 1 ) evaporationRate = temp; }    public Object domDiffusionConstant() { return new Interval(0.0,1.0); }    public double getDiffusionConstant() { return diffusionRate; }    public void setDiffusionConstant( double temp ) { if( temp >= 0 && temp <= 1 ) diffusionRate = temp; }    public Object domRandomMovementProbability() { return new Interval(0.0,1.0); }    public double getRandomMovementProbability() { return randomMovementProbability; }    public void setRandomMovementProbability( double t )        {        if (t >= 0 && t <= 1)            {            randomMovementProbability = t;            for( int i = 0 ; i < bugCount ; i++ )                if (bugs[i]!=null)                    bugs[i].setRandomMovementProbability( randomMovementProbability );            }        }    public double getMaximumHeat() { return MAX_HEAT; }    public int getGridHeight() { return gridHeight; }    public int getGridWidth() { return gridWidth; }    public int getBugCount() { return bugCount; }    public void setBugCount(int val) { if (val >= 0) bugCount = val; }    public DoubleGrid2D valgrid = new DoubleGrid2D(gridWidth, gridHeight,0);    public DoubleGrid2D valgrid2 = new DoubleGrid2D(gridWidth, gridHeight, 0);    public SparseGrid2D buggrid = new SparseGrid2D(gridWidth, gridHeight);    // some variables shared by all hexa bugs in the application    DoubleBag neighVal = new DoubleBag();    IntBag neighX = new IntBag();    IntBag neighY = new IntBag();    /** Creates a HexaBugs simulation with the given random number seed. */    public HexaBugs(long seed)        {        // we build a schedule that has two orders per step: for the bugs, then the Hexa decreaser        super(new MersenneTwisterFast(seed), new Schedule(2));        bugs = new HexaBug[bugCount];        }            /** Resets and starts a simulation */    public void start()        {        super.start();  // clear out the schedule                // make new grids        valgrid = new DoubleGrid2D(gridWidth, gridHeight,0);        valgrid2 = new DoubleGrid2D(gridWidth, gridHeight, 0);        buggrid = new SparseGrid2D(gridWidth, gridHeight);  // we're doing toroidal, so specify dimensions        bugs = new HexaBug[bugCount];        // Schedule the Hexa bugs -- we could instead use a RandomSequence, which would be faster        // But we spend no more than 3% of our total runtime in the scheduler max, so it's not worthwhile        for(int x=0;x<bugCount;x++)            {            bugs[x] = new HexaBug(random.nextDouble() * (maxIdealTemp - minIdealTemp) + minIdealTemp,                                  random.nextDouble() * (maxOutputHeat - minOutputHeat) + minOutputHeat,                                   MAX_HEAT, randomMovementProbability);            buggrid.setObjectLocation(bugs[x],random.nextInt(gridWidth),random.nextInt(gridHeight));            schedule.scheduleRepeating(bugs[x]);            }                                    // Schedule the decreaser to happen after the HexaBugs        if (availableProcessors() >  1)  // yay, multi-processor!            schedule.scheduleRepeating(Schedule.EPOCH,1,new ThreadedHexaDiffuser(valgrid,valgrid2,evaporationRate,diffusionRate),1);        else            schedule.scheduleRepeating(Schedule.EPOCH,1,new HexaDiffuser(valgrid,valgrid2,evaporationRate,diffusionRate),1);        }        public int availableProcessors()        {        Runtime runtime = Runtime.getRuntime();        try { return ((Integer)runtime.getClass().getMethod("availableProcessors", null).                      invoke(runtime,null)).intValue(); }        catch (Exception e) { return 1; }  // a safe but sometimes wrong assumption!        }    public static void main(String[] args)        {        doLoop(HexaBugs.class, args);        System.exit(0);        }        }                    

⌨️ 快捷键说明

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