R 中的数据挖掘算法/包/optimsimplex/optimsimplex.new
optimsimplex.new 创建一个单纯形列表对象,其中包含顶点矩阵和在这些顶点计算的函数值向量等元素。该对象实际上是由一个基于method参数值的辅助函数创建的。
- NULL -> optimsimplex.coords
- ’axes’ -> optimsimplex.axes
- ’pfeffer’ -> optimsimplex.pfeffer
- ’randbounds’ -> optimsimplex.randbounds
- ’spendley’ -> optimsimplex.spendley
- ’oriented’ -> optimsimplex.oriented
optimsimplex.new(coords = NULL, fun = NULL, data = NULL, method = NULL, x0 = NULL, len = NULL, deltausual = NULL, deltazero = NULL, boundsmax = NULL, boundsmin = NULL, nbve = NULL, simplex0 = NULL) optimsimplex.coords(coords = NULL, fun = NULL, data = NULL) optimsimplex.axes(x0 = NULL, fun = NULL, len = NULL, data = NULL) optimsimplex.pfeffer(x0 = NULL, fun = NULL, deltausual = NULL, deltazero = NULL, data = NULL) optimsimplex.randbounds(x0 = NULL, fun = NULL, boundsmin = NULL, boundsmax = NULL, nbve = NULL, data = NULL) optimsimplex.spendley(x0 = NULL, fun = NULL, len = NULL, data = NULL) optimsimplex.oriented(simplex0 = NULL, fun = NULL, data = NULL)
coords | 单纯形中点估计坐标的矩阵。coords 矩阵应该是一个 nbve x n 矩阵,其中 n 是空间的维数,nbve 是单纯形中的顶点数,nbve>= n+1。仅在method设置为 NULL 时使用。 |
fun | 要在顶点计算的函数。该函数应具有以下输入和输出参数myfunction <- function(x, this){ ... return(list(f=f,this=this)) } 其中 x 是一个行向量,this 是用户定义的数据,即data参数。 |
data | 传递给函数的用户定义数据。如果提供了 data,则将其作为输入和输出参数传递给回调函数。data 可以在函数使用一些额外的参数时使用。它作为输出参数返回,因为函数可能在计算函数值时修改数据。此功能可用于例如计算函数调用次数。 |
method | 用于创建新的 optimsimplex 对象的方法,可以是 ’axes’,’pfeffer’,’randbounds’,’spendley’ 或 ’oriented’。 |
x0 | 初始点估计,作为长度为 n 的行向量。 |
len | 单纯形的维数。如果 length 是一个值,则该唯一长度在所有方向上使用。如果 length 是一个具有 n 个值的向量,则每个长度与相应的方向一起使用。仅在method设置为 ’axes’ 或 ’spendley’ 时使用。 |
deltausual | 非零值的绝对增量。仅在method设置为 ’pfeffer’ 时使用。 |
deltazero | 零值的绝对增量。仅在method设置为 ’pfeffer’ 时使用。 |
boundsmin | 最小边界向量。仅在method设置为 ’randbounds’ 时使用。 |
boundsmax | 最大边界向量。仅在method设置为 ’randbounds’ 时使用。 |
nbve | 单纯形中的顶点总数。仅在method设置为 ’randbounds’ 时使用。 |
simplex0 | 初始单纯形。仅在method设置为 ’oriented’ 时使用。 |
optimsimplex.new 的所有参数都是可选的。如果没有提供输入,则新的单纯形对象为空。
如果method为 NULL,则新的单纯形对象由optimsimplex.coords创建。如果coords为 NULL,则单纯形对象为空;否则,coords将用作新单纯形中的初始顶点坐标。
如果method设置为 ’axes’,则新的单纯形对象由optimsimplex.axes创建。初始顶点坐标存储在一个 nbve x n 矩阵中,构建方式如下
[,1] | x0[1] ... x0[n] | | len[1] ... 0 | [,.] | ... ... ... | + | ... ... ... | [,nbve] | x0[1] ... x0[n] | | 0 ... len[n] |
如果method设置为 ’pfeffer’,则新的单纯形对象由optimsimplex.pfeffer创建,使用 Pfeffer 方法,即非零值的相对增量和零值的绝对增量。
如果method设置为 ’randbounds’,则新的单纯形对象由optimsimplex.randbounds创建。初始顶点坐标存储在一个 nbve x n 矩阵中,该矩阵包含初始点估计(在第一行)和一个 (nbve-1) x n 矩阵,其中包含在指定边界之间随机采样的数字。单纯形中的顶点数nbve是任意的。
如果method设置为 ’spendley’,则新的单纯形对象由optimsimplex.spendley创建,使用 Spendely 方法,即由 nbve = n+1 个顶点组成的规则单纯形。
如果method设置为 ’oriented’,则新的单纯形对象由optimsimplex.oriented创建,按排序顺序排列。新的单纯形具有与基本单纯形相同的 sigma-长度,但根据函数值“定向”。创建的单纯形可用于 Kelley 建议的 Nelder-Mead 算法的重新启动。
返回一个包含以下元素的列表
- newobj 一个具有 ’type’ 属性设置为 ’T_SIMPLEX’ 的列表,并包含以下元素
- verbose 详细选项,控制消息量。设置为 0。
- x 顶点的坐标,大小为 nbve x n。
- n 空间的维数。
- fv 给定顶点处的函数值。它是一个长度为 nbve 的列矩阵。
- nbve 顶点数。
- data 更新后的数据输入参数。
Scilab optimsimplex 模块的作者:Michael Baudin (INRIA - Digiteo)
R 适配的作者:Sebastien Bihorel ([email protected])
"A Simplex Method for Function Minimization", Nelder, J. A. and Mead, R. The Computer Journal, January, 1965, 308-313
"Sequential Application of Simplex Designs in Optimisation and Evolutionary Operation", W. Spendley, G. R. Hext, F. R. Himsworth, Technometrics, Vol. 4, No. 4 (Nov., 1962), pp. 441-461, Section 3.1
"A New Method of Constrained Optimization and a Comparison With Other Methods", M. J. Box, The Computer Journal 1965 8(1):42-52, 1965 by British Computer Society
"Detection and Remediation of Stagnation in the Nelder-Mead Algorithm Using a Sufficient Decrease Condition", SIAM J. on Optimization, Kelley C.T., 1999
"Multi-Directional Search: A Direct Search Algorithm for Parallel Machines", by E. Boyd, Kenneth W. Kennedy, Richard A. Tapia, Virginia Joanne Torczon, Virginia Joanne Torczon, 1989, Phd Thesis, Rice University
"Grid Restrained Nelder-Mead Algorithm", Arpad Burmen, Janez Puhan, Tadej Tuma, Computational Optimization and Applications, Volume 34 , Issue 3 (July 2006), Pages: 359 - 375
"A convergent variant of the Nelder-Mead algorithm", C. J. Price, I. D. Coope, D. Byatt, Journal of Optimization Theory and Applications, Volume 113 , Issue 1 (April 2002), Pages: 5 - 19
"Global Optimization Of Lennard-Jones Atomic Clusters", Ellen Fan, Thesis, February 26, 2002, McMaster University
myfun <- function(x,this){return(list(f=sum(x^2),this=this))} mat <- matrix(c(0,1,0,0,0,1),ncol=2)
optimsimplex.new() optimsimplex.new(coords=mat,x0=1:4,fun=myfun) optimsimplex.new(method='axes',x0=1:4,fun=myfun) optimsimplex.new(method='pfeffer',x0=1:6,fun=myfun) opt <- optimsimplex.new(method='randbounds',x0=1:6,boundsmin=rep(0,6), boundsmax=rep(10,6),fun=myfun) opt optimsimplex.new(method='spendley',x0=1:6,fun=myfun,len=10) optimsimplex.new(method='oriented',simplex=opt$newobj,fun=myfun)