I am trying to run optimization of a Metamodel created using date generated in external program. I created some code but unfortunately it seems to not work properly because it not find maximum value (for sure there are more optimal points, just have a look at data creating Metamodel). I tryied different settings of genetic algorithm but always get exactly the same value of 53353.944898. I am preety sure I have a bug in the code but can't find it as I am a beginner in python. Could somebody help me correct this code?

from openmdao.examples.simple.paraboloid import Paraboloid

import numpy as np
from openmdao.main.api import Assembly 
from openmdao.lib.components.api import MetaModel
from openmdao.lib.surrogatemodels.api import KrigingSurrogate, FloatKrigingSurrogate
from openmdao.lib.drivers.api import CaseIteratorDriver

from openmdao.lib.drivers.api import Genetic

INPUT = np.array([
[ 5.666666667, -7, -7.5, 7.166666667, -0.916666667, 4.166666667, 82.5, 237.5, 103.0833333, 222.9166667, -0.25, -12.75, -2.75, 192.5, 137.5, 367.9166667, -2.75, 0.301651856],
[ -9, -17, -8.833333333, -4.166666667, -1.083333333, 9.833333333, 332.5, 127.5, 116.0833333, 110.4166667, 7.25, 1.75, 13.25, 107.5, 282.5, 280.4166667, -7.25, 0.372832218],
[ 16.33333333, -29, -0.5, -0.5, -4.916666667, 4.5, 107.5, 217.5, 79.25, 52.08333333, -13.75, -9.75, 3.75, 172.5, 107.5, 356.25, 7.75, 3.533333333],
[ 7.666666667, -6.333333333, -4.5, -0.166666667, -2.416666667, -7.5, 327.5, 162.5, 105.25, 131.25, 10.75, 12.75, -3.75, 207.5, 242.5, 117.0833333, 3.85, 0.333333333],
[ 15, -9.666666667, -8.166666667, -1.5, 2.25, -6.833333333, 232.5, 67.5, 152.9166667, 127.0833333, -0.75, 6.25, -0.75, 232.5, 292.5, 157.9166667, -2.45, 0.957111537],
[ 29, -14.33333333, -2.833333333, -0.833333333, -1.916666667, 3.833333333, 312.5, 117.5, 113.9166667, 56.25, -12.75, -4.25, 11.75, 267.5, 312.5, 385.4166667, 2.35, 7.533333333],
[ 3, -5, -4.166666667, 0.833333333, 3.25, 7.833333333, 177.5, 82.5, 59.75, 285.4166667, 9.75, -11.75, -3.25, 337.5, 232.5, 391.25, 4.75, 2.733333333],
[ 21, 2.333333333, 1.5, -3.166666667, 1.416666667, 6.5, 292.5, 72.5, 122.5833333, 72.91666667, -14.75, -3.25, 2.75, 297.5, 332.5, 122.9166667, 5.35, 3.933333333],
[ -4.333333333, -5.666666667, -7.833333333, 7.833333333, -1.416666667, 2.5, 122.5, 337.5, 174.5833333, 156.25, -8.75, 2.25, 4.25, 212.5, 82.5, 292.0833333, -3.35, 3.316013909],
[ -3, -21, -3.5, -3.833333333, 4.916666667, 6.166666667, 347.5, 77.5, 92.25, 243.75, 7.75, 7.25, 13.75, 347.5, 152.5, 187.0833333, 8.05, 6.6],
[ 11.66666667, -28.33333333, -7.166666667, 2.166666667, 3.75, 9.5, 197.5, 232.5, 135.5833333, 210.4166667, 3.25, 9.25, 10.75, 272.5, 182.5, 204.5833333, -3.95, 3.345386979],
[ 8.333333333, -23, 3.5, -9.5, -2.083333333, 1.5, 297.5, 347.5, 137.75, 297.9166667, -13.25, -5.75, 11.25, 137.5, 57.5, 105.4166667, -5.45, 2.160679987],
[ -8.333333333, -3, 8.5, -8.833333333, -4.083333333, 3.5, 132.5, 192.5, 68.41666667, 281.25, 2.75, 0.25, -7.25, 102.5, 257.5, 146.25, 7.15, 5.133333333],
[ 21.66666667, -22.33333333, -2.5, 5.5, -2.916666667, 4.833333333, 137.5, 197.5, 74.91666667, 231.25, -7.75, -6.25, 6.75, 132.5, 167.5, 64.58333333, -4.55, 0.5341979],
[ -6.333333333, -18.33333333, -1.5, -3.5, 2.083333333, 2.833333333, 287.5, 292.5, 111.75, 139.5833333, -11.25, -8.75, 9.25, 187.5, 157.5, 344.5833333, 3.55, 7.8],
[ 0.333333333, -26.33333333, 6.5, -6.833333333, -3.916666667, -8.833333333, 272.5, 202.5, 94.41666667, 164.5833333, -5.75, 3.75, 1.25, 307.5, 102.5, 321.25, 5.95, 7.933333333],
[ 22.33333333, -21.66666667, 6.166666667, 4.5, -0.75, 3.166666667, 277.5, 207.5, 87.91666667, 60.41666667, -8.25, 9.75, -5.25, 342.5, 267.5, 268.75, 8.65, 4.333333333],
[ 15.66666667, 5.666666667, -6.5, 8.5, -1.583333333, -9.166666667, 322.5, 142.5, 165.9166667, 256.25, 1.75, -3.75, -1.75, 252.5, 222.5, 134.5833333, 1.15, 2.333333333],
[ 2.333333333, -25.66666667, 0.166666667, 1.833333333, -0.25, 0.5, 342.5, 282.5, 90.08333333, 168.75, 12.75, -10.75, -6.75, 257.5, 237.5, 70.41666667, 6.25, 1],
[ -3.666666667, 6.333333333, 5.5, -4.5, 0.583333333, 7.166666667, 87.5, 227.5, 100.9166667, 227.0833333, -7.25, 1.25, 8.25, 287.5, 217.5, 315.4166667, 6.85, 4.866666667],
[ -9.666666667, -27.66666667, -1.166666667, 2.5, 4.25, 5.833333333, 147.5, 287.5, 70.58333333, 122.9166667, -4.25, -7.25, 0.25, 77.5, 212.5, 99.58333333, 5.65, 3.8],
[ 10.33333333, -10.33333333, 9.166666667, 6.833333333, 4.416666667, -5.5, 117.5, 252.5, 51.08333333, 268.75, 0.75, 14.75, 6.25, 222.5, 252.5, 181.25, 4.45, 1.533333333],
[ 4.333333333, -11.66666667, 3.833333333, 3.5, 0.916666667, -4.166666667, 62.5, 212.5, 142.0833333, 260.4166667, 2.25, -7.75, 14.25, 127.5, 72.5, 274.5833333, -0.35, 3.457428538],
[ -5, -27, 0.833333333, 1.5, 3.916666667, -6.166666667, 127.5, 122.5, 55.41666667, 189.5833333, -12.25, -8.25, -10.25, 112.5, 342.5, 245.4166667, 6.55, 7.133333333],
[ 12.33333333, -19.66666667, -8.5, 3.833333333, -3.083333333, 8.833333333, 67.5, 137.5, 53.25, 64.58333333, -1.75, -4.75, 2.25, 282.5, 337.5, 262.9166667, -1.55, 1.749202577],
[ 11, -19, -0.166666667, 8.833333333, 4.75, 2.166666667, 242.5, 102.5, 61.91666667, 147.9166667, -10.25, -14.25, -6.25, 87.5, 127.5, 350.4166667, -6.05, 0.947600029],
[ 29.66666667, -25, -6.833333333, 5.833333333, -0.416666667, 7.5, 52.5, 267.5, 131.25, 202.0833333, 13.25, 2.75, 5.25, 167.5, 347.5, 76.25, -0.95, 4.577362415],
[ 3.666666667, -15.66666667, -5.166666667, 8.166666667, -3.75, -5.833333333, 142.5, 247.5, 129.0833333, 185.4166667, 0.25, -0.75, -7.75, 52.5, 187.5, 169.5833333, 1.75, 0.6],
[ 27.66666667, -0.333333333, 2.833333333, -9.166666667, -4.75, 5.166666667, 302.5, 317.5, 66.25, 264.5833333, 5.25, 3.25, -12.25, 237.5, 52.5, 338.75, 9.55, 7.266666667],
[ 25, 0.333333333, -9.5, -2.166666667, 4.083333333, -5.166666667, 202.5, 297.5, 120.4166667, 85.41666667, 14.25, -9.25, 10.25, 277.5, 142.5, 222.0833333, 1.45, 0.733333333],
[ 17.66666667, 3, 4.5, -4.833333333, 1.25, -2.5, 337.5, 327.5, 96.58333333, 277.0833333, 6.25, 4.25, 0.75, 177.5, 297.5, 332.9166667, -3.65, 1.03299978],
[ 23, 5, 2.5, 9.166666667, 2.583333333, 1.833333333, 112.5, 262.5, 163.75, 89.58333333, -10.75, -14.75, -8.75, 217.5, 192.5, 152.0833333, -4.25, 2.296573367],
[ -1.666666667, -11, -6.166666667, 1.166666667, 1.916666667, 5.5, 262.5, 147.5, 124.75, 93.75, -3.25, -1.75, -14.75, 152.5, 322.5, 175.4166667, 2.05, 6.333333333],
[ 14.33333333, -2.333333333, -0.833333333, 3.166666667, -4.25, 8.5, 187.5, 172.5, 176.75, 247.9166667, 4.25, -2.75, -1.25, 62.5, 132.5, 128.75, -0.05, 1.632939818],
[ 13, -13, 1.166666667, -5.5, 4.583333333, -6.5, 237.5, 187.5, 109.5833333, 206.25, 8.25, -6.75, 3.25, 72.5, 287.5, 198.75, -1.85, 0.656932094],
[ 25.66666667, -20.33333333, -9.166666667, -1.833333333, 1.583333333, 1.166666667, 92.5, 322.5, 144.25, 160.4166667, -5.25, -5.25, -4.25, 227.5, 277.5, 192.9166667, -1.25, 2.496396953],
[ 17, -3.666666667, 1.833333333, -1.166666667, -2.75, 6.833333333, 227.5, 332.5, 77.08333333, 77.08333333, -1.25, 6.75, -13.25, 327.5, 162.5, 362.0833333, 2.95, 0.2],
[ -2.333333333, -17.66666667, -5.833333333, 4.833333333, 0.25, -1.833333333, 167.5, 272.5, 98.75, 181.25, 9.25, 12.25, -12.75, 312.5, 67.5, 140.4166667, -2.15, 3.892598786],
[ 27, -9, -1.833333333, 7.5, 2.916666667, -2.166666667, 267.5, 152.5, 118.25, 106.25, -6.25, 13.75, -11.75, 57.5, 147.5, 52.91666667, 4.15, 1.133333333],
[ 13.66666667, -1, -3.833333333, -8.5, -2.583333333, 8.166666667, 162.5, 277.5, 172.4166667, 152.0833333, -4.75, 13.25, 1.75, 182.5, 112.5, 227.9166667, 8.35, 4.2],
[ -1, 1, -3.166666667, -7.166666667, 3.583333333, -4.833333333, 157.5, 182.5, 146.4166667, 118.75, 4.75, 10.25, -5.75, 292.5, 122.5, 373.75, 0.55, 2.866666667],
[ 24.33333333, -24.33333333, -5.5, 9.833333333, -4.416666667, -9.833333333, 72.5, 222.5, 81.41666667, 177.0833333, -11.75, 5.25, 7.25, 197.5, 317.5, 251.25, 3.25, 4.466666667],
[ 20.33333333, 1.666666667, -2.166666667, -7.833333333, -0.583333333, -0.833333333, 217.5, 302.5, 150.75, 272.9166667, -14.25, -2.25, -9.25, 67.5, 62.5, 257.0833333, 0.25, 5.533333333],
[ 9.666666667, -7.666666667, 2.166666667, -7.5, -3.416666667, 0.833333333, 282.5, 97.5, 139.9166667, 97.91666667, -9.25, 8.75, 14.75, 317.5, 177.5, 216.25, -5.75, 0.668145969],
[ 28.33333333, -4.333333333, 5.833333333, 2.833333333, -4.583333333, -1.5, 252.5, 167.5, 155.0833333, 193.75, 6.75, -12.25, -14.25, 117.5, 272.5, 233.75, 0.85, 5.933333333],
[ 1, -13.66666667, 6.833333333, 5.166666667, 0.75, -9.5, 317.5, 62.5, 126.9166667, 218.75, 13.75, -0.25, -2.25, 242.5, 92.5, 111.25, -3.05, 0.040605913],
[ 18.33333333, -29.66666667, 9.5, -6.5, 0.416666667, -7.166666667, 192.5, 87.5, 170.25, 135.4166667, 14.75, 4.75, 8.75, 332.5, 247.5, 87.91666667, 7.45, 3.266666667],
[ 5, 3.666666667, -9.833333333, -6.166666667, -3.583333333, -1.166666667, 172.5, 57.5, 168.0833333, 143.75, 3.75, 0.75, -0.25, 82.5, 227.5, 303.75, -0.65, 1.872510843],
[ 9, 7.666666667, 7.833333333, 4.166666667, 2.416666667, -0.166666667, 212.5, 107.5, 159.4166667, 197.9166667, 12.25, 5.75, 4.75, 157.5, 202.5, 297.9166667, 5.05, 6.866666667],
])

OUTPUT = np.array([
49334.6,
60432.6,
56323.8,
67313.7,
42472.1,
60265,
46966.9,
59148.4,
52812.7,
44109,
50718.2,
58288.7,
49526.1,
45984.3,
64331.7,
59113.7,
59188.4,
57713.4,
63859.8,
54517.7,
60775.3,
56057.3,
50367.5,
43026.1,
51748.3,
61977.6,
36483.8,
54508.4,
50802.9,
36466.7,
46488.5,
52177.8,
63016.1,
51895.5,
49449.4,
43006.7,
61339.7,
56858.2,
60283.2,
56576.4,
54564.6,
44235.3,
55864.9,
64577.3,
44664.5,
53903.8,
47092,
56184.6,
47530.1,
])

class SimpleMeta(Assembly):

    def configure(self): 
        meta = self.add('meta', MetaModel(params=('x0','x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','x12','x13','x14','x15','x16','x17'), 
                                        responses=('y0',)
                                       )
                     )

        meta.default_surrogate = FloatKrigingSurrogate()
        meta.params.x0 = list(INPUT[:,0])
        meta.params.x1 = list(INPUT[:,1])
        meta.params.x2 = list(INPUT[:,2])
        meta.params.x3 = list(INPUT[:,3])
        meta.params.x4 = list(INPUT[:,4])
        meta.params.x5 = list(INPUT[:,5])
        meta.params.x6 = list(INPUT[:,6])
        meta.params.x7 = list(INPUT[:,7])
        meta.params.x8 = list(INPUT[:,8])
        meta.params.x9 = list(INPUT[:,9])
        meta.params.x10 = list(INPUT[:,10])
        meta.params.x11 = list(INPUT[:,11])
        meta.params.x12 = list(INPUT[:,12])
        meta.params.x13 = list(INPUT[:,13])
        meta.params.x14 = list(INPUT[:,14])
        meta.params.x15 = list(INPUT[:,15])
        meta.params.x16 = list(INPUT[:,16])
        meta.params.x17 = list(INPUT[:,17])

        meta.responses.y0 = list(OUTPUT)

        #set up some kind of analysis on the metamodel
        driver = self.add('driver',CaseIteratorDriver())
        driver.add_parameter('meta.x0')
        driver.add_parameter('meta.x1')
        driver.add_parameter('meta.x2')
        driver.add_parameter('meta.x3')
        driver.add_parameter('meta.x4')
        driver.add_parameter('meta.x5')
        driver.add_parameter('meta.x6')
        driver.add_parameter('meta.x7')
        driver.add_parameter('meta.x8')
        driver.add_parameter('meta.x9')
        driver.add_parameter('meta.x10')
        driver.add_parameter('meta.x11')
        driver.add_parameter('meta.x12')
        driver.add_parameter('meta.x13')
        driver.add_parameter('meta.x14')
        driver.add_parameter('meta.x15')
        driver.add_parameter('meta.x16')
        driver.add_parameter('meta.x17')

        driver.add_response('meta.y0')

class OptimizationConstrained(Assembly):
    """Constrained optimization of the Paraboloid Component."""

    def configure(self):

        # Create Optimizer instance
        #self.add('driver', SLSQPdriver())
        self.add('driver', Genetic())

        # Create Paraboloid component instances
        self.add('metaModel', sm.meta)

        # Iteration Hierarchy
        self.driver.workflow.add('metaModel')

        # SLSQP Flags
        self.driver.iprint = 0

        # Objective
        self.driver.add_objective('metaModel.y0')

        # Design Variables
        self.driver.add_parameter('metaModel.x0', low=-10., high=30.)
        self.driver.add_parameter('metaModel.x1', low=-30., high=10.)
        self.driver.add_parameter('metaModel.x2', low=-10., high=10.)
        self.driver.add_parameter('metaModel.x3', low=-10., high=10.)
        self.driver.add_parameter('metaModel.x4', low=-5., high=5.)
        self.driver.add_parameter('metaModel.x5', low=-10., high=10.)
        self.driver.add_parameter('metaModel.x6', low=50., high=350.)
        self.driver.add_parameter('metaModel.x7', low=50., high=350.)
        self.driver.add_parameter('metaModel.x8', low=50., high=180.)
        self.driver.add_parameter('metaModel.x9', low=50., high=300.)
        self.driver.add_parameter('metaModel.x10', low=-15., high=15.)
        self.driver.add_parameter('metaModel.x11', low=-15., high=15.)
        self.driver.add_parameter('metaModel.x12', low=-15., high=15.)
        self.driver.add_parameter('metaModel.x13', low=50., high=350.)
        self.driver.add_parameter('metaModel.x14', low=50., high=350.)
        self.driver.add_parameter('metaModel.x15', low=50., high=400.)
        self.driver.add_parameter('metaModel.x16', low=-8., high=10.)
        self.driver.add_parameter('metaModel.x17', low=0., high=8.)

        # Constraints
       # self.driver.add_constraint('paraboloid.x-paraboloid.y >= 15.0')
       # self.driver.add_constraint('paraboloid.x >= 10.0')

       # Genetic-specific Settings
        self.driver.population_size = 90
        self.driver.crossover_rate = 0.9
        self.driver.mutation_rate = 0.1
        self.selection_method = 'rank'
        self.driver.opt_type = "maximize"
        self.driver.generations = 100
        self.driver.elitism = True

if __name__ == "__main__":

    sm = SimpleMeta()
    sm.run()

    print sm.driver.case_outputs.meta.y0

    opt_problem = OptimizationConstrained()

    import time
    tt = time.time()

    opt_problem.run()

    print "\n"
    print "Maximum found at \n(%f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f,\n %f, \
    \n %f,\n %f,\n %f,\n %f,\n %f,\n %f)" % (opt_problem.metaModel.x0, opt_problem.metaModel.x1, opt_problem.metaModel.x2, \
    opt_problem.metaModel.x3, opt_problem.metaModel.x4, opt_problem.metaModel.x5, opt_problem.metaModel.x6, opt_problem.metaModel.x7, \
    opt_problem.metaModel.x8, opt_problem.metaModel.x9, opt_problem.metaModel.x10, opt_problem.metaModel.x11, opt_problem.metaModel.x12, opt_problem.metaModel.x13, opt_problem.metaModel.x14, opt_problem.metaModel.x15, opt_problem.metaModel.x16, opt_problem.metaModel.x17)
    print "Maximum is %f" % (opt_problem.metaModel.y0)   
    print "Elapsed time: ", time.time()-tt, "seconds"

asked 29 Jul '15, 00:59

curky's gravatar image

curky
122


This seems to be a scaling problem. When I divided the input terms by 1000.0

INPUT = INPUT/1000.0

and rescaled all of the parameter highs and lows like:

self.driver.add_parameter('metaModel.x17', low=0./1000.0, high=8./1000.0)

Then I got the kind of behavior I expected. Now it finds a minimum in the 67800 range, and it changes with each run.

Internal to the Kriging prediction, there is a log-likelihood calculation that takes e to the power of minus the sum of the differences between each training sample and the samples "ahead" of it. For this problem, it ended up a large negative number, and taking e to that power gives you zero, so basically it wasn't going anywhere and the prediction stayed the same each time. Scaling the X data eliminated that problem.

link

answered 06 Aug '15, 11:37

Kenneth%20T%20Moore's gravatar image

Kenneth T Moore ♦
1.1k1212

edited 06 Aug '15, 11:38

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×14

Asked: 29 Jul '15, 00:59

Seen: 1,708 times

Last updated: 06 Aug '15, 11:38

powered by OSQA