$import "model.maml";

@observe Segregation {
@uses ;		// For the 2d graphics display

  @extendAgent Resident {
    @sub: (void) drawSelfOn: (id) r {
      [r drawPointX: posX Y: posY Color: color];
    }
  }

@probe: var "citySize", var "numOfResidents", var "ratio",
        var "minLimit", var "maxLimit", 
        var "minAgeLimit", var "maxAgeLimit",
        var "emptyIsOK";

@var: id colormap;	
@var: id cityRaster;		
@var: id cityDisplay;		

@var: int displayFrequency;
@probe: var "displayFrequency";

@schedule cyclic (displayFrequency) {	
  0: @planDef {
       @to cityRaster erase;
       @to cityDisplay display;	
       @to cityRaster drawSelf;		
     }  
}

@init:

  citySize = 50;
  numOfResidents = 2000;
  ratio = 50;
  minAgeLimit = 0;
  maxAgeLimit = 80;
  minLimit = 0.25;
  maxLimit = 0.70;
  emptyIsOK = true;
  
  displayFrequency = 1;

  @buildProbes;
  [model probe];
  
  [controlPanel setStateStopped];
  @initModel;

  @create Colormap colormap;    
  [colormap setColor: 1 ToName: "red"];
  [colormap setColor: 2 ToName: "blue"];

  @create ZoomRaster cityRaster;
  [cityRaster setColormap: colormap];
  [cityRaster setZoomFactor: 6];
  [cityRaster setWidth: citySize Height: citySize];
  [cityRaster setWindowTitle: "Schelling's Segregation City"];
  [cityRaster pack];

  @create Object2dDisplay cityDisplay {
    [cityDisplay setDisplayWidget: cityRaster];
    [cityDisplay setDiscrete2dToDisplay: city];
    [cityDisplay setObjectCollection: groupOfResident];
    [cityDisplay setDisplayMessage: M(drawSelfOn:)];       
  } 
}
----

ButtonReturn to Contents of this issue

© Copyright Journal of Artificial Societies and Social Simulation, 1999