/timm's /charming /python /tricks

models.py

Download models.py.
Read more on How to be Charming (in Python).


01: import sys
02: sys.dont_write_bytecode=True
03: from model  import *
04: 
05: class Schaffer(Model):
06:   "A very simple model."
07:   def has(i):
08:     return [Num("$x1",lo=-10,hi=10),
09:             Num("<f1"),
10:             Num("<f2")]
11:   def score(i,l):
12:     x = i.get(l,"x1")
13:     i.put(l, "f1", x**2)
14:     i.put(l, "f2", (x-2)**2)
15:     
16: class Kursawe(Model):
17:   "A model with 8 decisions and 2 objectives."
18:   def has(i):
19:     return [Num("$x1",lo = -5,hi = 5),
20:             Num("$x2",lo = -5,hi = 5),
21:             Num("$x3",lo = -5,hi = 5),
22:             Num("$x4",lo = -5,hi = 5),
23:             Num("$x5",lo = -5,hi = 5),
24:             Num("$x6",lo = -5,hi = 5),
25:             Num("$x7",lo = -5,hi = 5),
26:             Num("$x8",lo = -5,hi = 5),
27:             Num("<f1"),
28:             Num("<f2")]
29:   def score(i,l):
30:     f1 = f2 = 0.0
31:     for n,one in enumerate(l[:7]):
32:       two = l[n+1]
33:       f1 += -10*e**(-0.2*(one**2 + two**2)**0.5)
34:     for one in l[:8]:
35:       f2 += abs(one)**0.8 + 5*math.sin(one**3)
36:     i.put(l,"f1",f1)
37:     i.put(l,"f2",f2)
38: 
39: def run(what=Schaffer,repeats=10):
40:   """Note that the high-level loop is generic
41:    to all models."""
42:   x=what()
43:   for _ in range(repeats):
44:     print x.any()
45:   for col in x.t.columns:
46:     print col
47: 
48: def schafferd(): run(Schaffer)
49: def kursawed() : run(Kursawe)
50: 

This file is part of Timm's charming Python tricks.
© 2014, Tim Menzies: tim.menzies@gmail.com, http://menzies.us.

Timm's charming Python tricks are free software: you can redistribute it and/or modify it under the terms of the GNU Lesser Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Timm's charming Python tricks are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU Lesser Public License along with Foobar. If not, see http://www.gnu.org/licenses.