source: java/main/src/main/java/com/framsticks/standard/StandardExperiment.java @ 107

Last change on this file since 107 was 107, checked in by psniegowski, 11 years ago

HIGHLIGHTS:

  • add SimultorProviders? hierarchy
  • start Framsticks server over SSH
  • FJF compatible with Framsticks 4.0rc3
  • reading and writing of standard.expt
  • a proof-of-concept implementation of StandardExperiment?

CHANGELOG:
Optionally return FreeAccess? from registry.

Add SimulatorRange?.

StandardExperiment? with genotypes circulation.

Automate registration around StandardState?.

More improvements to StandardExperiment?.

Skeleton version of StandardExperiment?.

Test saving of StandardState?.

Standard experiment state is being loaded.

More development towards StandardState? reading.

Work on reading standard experiment state.

Add classes for standard experiment.

Update example standard.expt

Add FreeAccess? and FreeObject?.

Made compatible with version 4.0rc3

Change deserialization policy.

Improve SSH support.

Working running simulator over SSH.

Fix joining bug in Experiment.

Working version of SimulatorRunner?.

Add more SimulatorProviders?.

Working PrimeExperimentTest? with 4.0rc3

Add references to deserialization.

Add OpaqueObject? and it's serialization.

Add deserialization of dictionaries.

Partial implementation of deserialization.

Add more tests for deserialization.

Prepare tests for deserialization.

Add proper result to prime experiment test.

Minor fixes to simulators providers.

Draft version of SimulatorProvider?.

Add SimulatorProvider? interface.

File size: 4.0 KB
Line 
1package com.framsticks.standard;
2
3import java.util.LinkedList;
4import java.util.List;
5import java.util.Random;
6import java.util.TimerTask;
7
8import com.framsticks.experiment.Experiment;
9import com.framsticks.experiment.Simulator;
10import com.framsticks.model.Genotype;
11import com.framsticks.params.Access;
12import com.framsticks.params.EventListener;
13import com.framsticks.params.Registry;
14import com.framsticks.params.annotations.FramsClassAnnotation;
15import com.framsticks.structure.messages.ListChange;
16import com.framsticks.util.dispatching.Dispatching;
17import com.framsticks.util.dispatching.Future;
18
19import org.apache.logging.log4j.Logger;
20import org.apache.logging.log4j.LogManager;
21
22@FramsClassAnnotation
23public class StandardExperiment extends Experiment {
24
25        private static final Logger log = LogManager.getLogger(StandardExperiment.class);
26
27        protected final Registry registry = new Registry();
28
29        protected List<Genotype> genotypes = new LinkedList<>();
30        protected Random random = new Random();
31
32        // @ParamAnnotation
33        // protected final NetLoadSaveLogic<StandardState> netLoadSaveLogic;
34
35        /**
36         *
37         */
38        public StandardExperiment() {
39
40                setExpdef("standard");
41                registry.registerAndBuild(StandardState.class);
42
43                addSimulatorsListener(new EventListener<ListChange>() {
44                        @Override
45                        public void action(final ListChange change) {
46                                assert isActive();
47                                final Simulator simulator = getSimulators().get(change.getIdentifier());
48                                if (change.getAction().equals(ListChange.Action.Add)) {
49                                        simulator.init();
50                                        return;
51                                }
52                                if (change.getAction().equals(ListChange.Action.Modify)) {
53                                        if (change.hasHint("ready")) {
54                                                log.debug("issuing netsave");
55
56                                                simulator.netsave(StandardState.class, new Future<StandardState>(StandardExperiment.this) {
57                                                        @Override
58                                                        protected void result(StandardState result) {
59                                                                assert isActive();
60                                                                assert result != null;
61                                                                processState(simulator, result);
62
63                                                                simulator.netload(result, new Future<Object>(StandardExperiment.this) {
64
65                                                                        @Override
66                                                                        protected void result(Object result) {
67                                                                                runSimulatorFor(simulator);
68                                                                        }
69                                                                });
70                                                        }
71                                                });
72                                        }
73
74                                        return;
75                                }
76
77                        }
78                });
79
80
81                // netLoadSaveLogic = new NetLoadSaveLogic<StandardState>(this, StandardState.class) {
82                //      @Override
83                //      public void netload(Simulator simulator, FutureHandler<StandardState> net) {
84                //              assert isActive();
85                //              // Dispatching.sleep(0.1);
86                //              net.pass(null);
87                //              // simulator.start();
88                //      }
89
90                //      @Override
91                //      public void netsave(Simulator simulator, StandardState net) {
92                //              assert isActive();
93                //              log.debug("saved state: {}", net);
94                //              runSimulatorFor(simulator);
95                //      }
96                // };
97
98        }
99
100        protected void processState(Simulator simulator, StandardState state) {
101                Access genePoolAccess = registry.bindAccessFor(state.genepools.get(0));
102                Access genotypesAccess = registry.bindAccessFor(genePoolAccess, "genotypes");
103                int count = genotypesAccess.getParamCount();
104                int toRemove = count / 10;
105
106                log.debug("processing state {} for simulator {} with {} genotypes", state, simulator, count);
107
108                List<Genotype> removed = new LinkedList<>();
109                for (int c = 0; c < toRemove; ++c) {
110                        int number = random.nextInt(genotypesAccess.getParamCount());
111                        Genotype genotype = genotypesAccess.get(number, Genotype.class);
112                        genotypesAccess.set(number, null);
113                        log.debug("removing {} from {}", genotype, simulator);
114                        removed.add(genotype);
115                }
116
117                int toAdd = toRemove;
118                if (toAdd > genotypes.size()) {
119                        toAdd = genotypes.size();
120                }
121                if (genotypes.size() > 100) {
122                        toAdd = genotypes.size() - 100;
123                }
124
125                for (int a = 0; (a < toAdd) && (!genotypes.isEmpty()); ++a) {
126                        Genotype genotype = genotypes.remove(0);
127                        log.debug("adding {} to {}", genotype, simulator);
128                        genotype.uid = null;
129                        genotypesAccess.set((String) null, genotype);
130                }
131                log.debug("state processed");
132                genotypes.addAll(removed);
133        }
134
135        protected void runSimulatorFor(final Simulator simulator) {
136                simulator.start();
137                Dispatching.getTimer().schedule(new TimerTask() {
138
139                        @Override
140                        public void run() {
141                                simulator.stop();
142                        }
143                }, 2000);
144        }
145}
Note: See TracBrowser for help on using the repository browser.