Case 3: Your own mobsim

The short story

The "mobility simulation", or short "mobsim", is what executes all selected plans, and writes events.

The slightly longer story

You can do

Controler controler = new Controler() ;
controler.setMobsimFactory( new MyMobsimFactory() ) ;

plus

public class MyMobsimFactory implements MobsimFactory {
    public Simulation createMobsim( Scenario sc, EventsManager ev ) {
        return new MyMobsim( sc, ev ) ;
    }
}

plus

class MyMobsim extends Simulation {
    Scenario sc ; EventsManager ev ;
    MyMobsim( Scenario sc , EventsManger ev ) {
        this.sc = sc ; this.ev = ev ;
    }
    public void run() {
        Network net = sc.getNetwork() ;
        Population pop = sc.getPopulation() ;
        ...
        EventsFactory ef = ev.getFactory() ;
        ev.processEvent( ef.createXXXEvent( ... ) ) ;
        ...
    }
}

This is fully api-based (except that some material is still under core.api.experimental) .

You then need to make sure that

  • you execute all selected plans
  • you generate agent activity end events
  • you generate agent/vehicle departure events
  • you generate link leave events
  • you generate link enter events
  • you generate agent/vehicle arrival events
  • you generate agent activity start events

If you do this, your mobsim should work inside the MATSim iterative framework.


Warning: Table 'watchdog' is read only query: INSERT INTO watchdog (uid, type, message, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '<em>Table &amp;#039;sessions&amp;#039; is read only\nquery: UPDATE sessions SET uid = 0, cache = 0, hostname = &amp;#039;38.107.179.234&amp;#039;, session = &amp;#039;&amp;#039;, timestamp = 1328355816 WHERE sid = &amp;#039;e972b2ab7dd755a2094beea8ac708f02&amp;#039;</em> in <em>/home01/vsp_access/matsimwww/includes/database.mysql.inc</em> on line <em>174</em>.', 2, '', 'http://matsim.org/node/466', '', '38.107.179.234', 1328355816) in /home01/vsp_access/matsimwww/includes/database.mysql.inc on line 174