所有优化软件其实都大同小异,无非就是软件接口的多少和集成的算法的多少的区别。
软件其实很简单,我们自己都可以写,重要的是算法。
我就从比较好上手,又免费的LS-OPT软件开始我们的科学炼丹,在这里先恭祝各位早日得道。
首先打开我们的LS-OPT,我们可以看到这里有很多的元模型,或者叫代理模型来供我们选择。
从上到下,大致有响应面模型,前馈神经网络,径向基函数,克里金,支持向量回归。
什么是代理模型?代理模型是指在分析和优化设计过程中可替代那些比较复杂和费时的数值分析的近似数学模型,也就是通过一定的方法去构建一个未知系统的近似模型,也称为近似模型或元模型。代理模型方法可以大大提高优化设计效率、降低优化难度,并有利于实现并行优化设计。
在现有代理模型方法中,源于地质统计学的Kriging模型是一种具有代表性方法。
所以我们今天就先来讲Kriging模型,大家大致了解一下就可以了,想要深入了解的,可以去某乎看看。
Kriging模型就是从一系列观测点学习到空间场的值的分布情况(两两点的距离和值的相关关系,然后假设在空问场内该关系处处可用,通过计算待观测点和其余已知观测点的距离和我们得到的场内的关系从而得到待观测点和其余观测点的值的关系,从而得到场内所有的观测点对待观测点的一个影响因子,最后计算得到待测点的预测值。
知道了原理,下面我们就用python来实现一下Kriging算法。
这里我们要用到pyKriging包。
使用pyKriging的目的旨在简化代理模型的创建过程。下列例子演示了如何创建抽样计划、在这些位置评估测试函数、创建和训练一个Kriging模型、并且添加点来减少模型的均方根误差。
代码如下:
import pyKriging
from pyKriging.krige import kriging
from pyKriging.samplingplan import samplingplan
# The Kriging model starts by defining a sampling plan, we use an optimal Latin Hypercube here
sp = samplingplan(2)
X = sp.optimallhc(20)
# Next, we define the problem we would like to solve
testfun = pyKriging.testfunctions().branin
y = testfun(X)
# Now that we have our initial data, we can create an instance of a Kriging model
k = kriging(X, y, testfunction=testfun, name='simple')
k.train()
# Now, five infill points are added. Note that the model is re-trained after each point is added
numiter = 5
for i in range(numiter):
print 'Infill iteration {0} of {1}....'.format(i + 1, numiter)
newpoints = k.infill(1)
for point in newpoints:
k.addPoint(point, testfun(point)[0])
k.train()
# And plot the results
k.plot()
创建了20个抽样点
最后添加五个点来训练得到我们最终的Kriging模型