gensim 0.0.7 copy "gensim: ^0.0.7" to clipboard
gensim: ^0.0.7 copied to clipboard

outdated

Gensim is an API which allows developers to quickly and easily set up simulations of the evolutionary process.

example/gensim_example.dart

import 'package:gensim/gensim.dart';
import 'bunny.dart';
import 'fox.dart';

void main() {
  ///Skills allow you to make an actor perform a funtion
  var skill1 = Skill(name: 'Talk', function: (str) => print(str));
  var skillList = <Skill>{skill1};

  ///Traits are the features of an actor which evolve as they breed
  var parentTraitHeight = Trait('Height', 6, 100);
  var parentTraitWeight = Trait('Weight', 80, 300);

  ///These are built in traits and need to be set for every actor
  var parentTraitGestationPeriod = GestationPeriod(cycles: 2, maxValue: 10);
  var parentTraitFearOfSickKin = FearOfSickKin(avoidBelowHealth: 70);
  var parentTraitLifespan = LifeSpan(cycles: 200, maxCycles: 500);

  ///Create a list of traits for be given to any actor.
  ///These traits always need be cloned from a parent trait so that a trait changing on one actor
  ///does not change the trait for every actor with that trait.
  var traitListMaleActor = <Trait>{
    Trait.clone(parentTraitHeight),
    Trait.clone(parentTraitWeight),
    Trait.clone(parentTraitGestationPeriod),
    Trait.clone(parentTraitFearOfSickKin),
    Trait.clone(parentTraitLifespan)
  };

  var traitListFemaleActor = <Trait>{
    Trait.clone(parentTraitHeight),
    Trait.clone(parentTraitWeight),
    Trait.clone(parentTraitGestationPeriod),
    Trait.clone(parentTraitFearOfSickKin),
    Trait.clone(parentTraitLifespan)
  };

  ///Define a parent statistic and clone this each time you want to create a new instance of it.
  ///Simulation will modify stats based on name so when passing a parent stat into the stat change list,
  ///all child stats are modified.
  var parentHealthPrey = Statistic(
      name: 'prey health',
      value: 70,
      maxValue: 100,
      modifiedBy: StatModifiers.Plant,
      killOwnerValue: 0);

  var parentHealthPredator = Statistic(
      name: 'predator health',
      value: 100,
      maxValue: 100,
      modifiedBy: StatModifiers.Meat,
      killOwnerValue: 0);

  var statsPrey = <Statistic>{parentHealthPrey};

  var maleHealth = Statistic.clone(statsPrey.first);
  var goalMaleStayAlive = Goal(maleHealth, 30, 0);

  ///The bunny is simply an extension of the prey class.
  ///Avoid using the prey class directly.
  ///This actor cannot carry a child so he is set to male.
  ///That being said he still has female specific traits
  ///which may be passed down to a daughter.
  var maleActor = Bunny(
      traits: traitListMaleActor,
      skills: skillList,
      statistics: {maleHealth},
      goals: {goalMaleStayAlive},
      canCarryChild: false,
      preyedUponOutput: Meat(value: 20));

  ///Clone the prey health statistic and assign that clone to a goal.
  var femaleHealth = Statistic.clone(statsPrey.first);
  var goalFemaleStayAlive = Goal(femaleHealth, 30, 0);

  ///The bunny is simply an extension of the prey class.
  ///Avoid using the prey class directly
  ///Make certain the same stat instance is passed into
  ///a goal which should be tracking it.
  var femaleActor = Bunny(
      traits: traitListFemaleActor,
      skills: skillList,
      statistics: {femaleHealth},
      goals: {goalFemaleStayAlive},
      canCarryChild: true,
      preyedUponOutput: Meat(value: 20));

  ///The fox is simply an extension of the predator class.
  ///Avoid using the prey class directly
  ///Given there is only one fox we can use the parent stats and goals for predators.
  var fox = Fox(
    goals: {Goal(parentHealthPredator, 20, 0)},
    skills: {},
    statistics: {parentHealthPredator},
    traits: traitListMaleActor,
  );

  ///Tell the simulation to add a value to its correlated stat each cycle.
  ///This could be used to simulate hunger etc.
  var statChangeMap = <Statistic, int>{
    parentHealthPrey: -2,
    parentHealthPredator: -1
  };

  ///The simulation is where everything comes together.
  ///It takes and X and Y values which define the size of the sim world (x, y).
  ///maxCycles defines the number cyles to perform before the simulation stops.
  ///actors are the actor objects we defined above (The fun part).
  ///consumables are a list of Consumable objects for the herbivores to eat.
  var sim = Simulation(
      worldSizeX: 10,
      worldSizeY: 10,
      maxCycles: 10000,
      actors: [maleActor, femaleActor, fox],
      consumables: [
        Plant(value: 10, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
        Plant(value: 20, cyclesToRegrow: 10),
      ],
      statChangeMap: statChangeMap);

  ///Start the simulation and enjoy.
  sim.run();
}
2
likes
0
pub points
27%
popularity

Publisher

unverified uploader

Gensim is an API which allows developers to quickly and easily set up simulations of the evolutionary process.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

meta

More

Packages that depend on gensim