# 数学函数 / 优化 ## `nonLP_fmincon(fun, x_0, a, b, aeq, beq, nonlcon)` 声明:function 使用起作用集法求解带线性约束和非线性约束的优化问题 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------------- | | `fun` | string | 目标函数名称 | | `x_0` | array | 初始点 | | `a` | array | 线性不等式约束矩阵 | | `b` | array | 线性不等式约束向量 | | `aeq` | array | 线性等式约束矩阵 | | `beq` | array | 线性等式约束向量 | | `nonlcon` | string | 非线性约束函数名称,空字符串表示无 | 返回:array ### 示例 范例01:调用无显式约束的目标函数 ```tsl empty_matrix := array(); return nonLP_fmincon( "sum", array(1.0), empty_matrix, empty_matrix, empty_matrix, empty_matrix, ""); ``` ## `Fmin(fun, x0, a, b, aeq, beq, lb, ub, nonlcon)` 声明:function 用起作用集法求任意形式的非线性优化问题,返回最优点和最优值。新的非线性规划代码建议使用 `Prog_N`。 来源:天软金融分析.NET函数大全 > TSL函数 > 数学函数 > 优化 > Fmin Source ID:21143 | 参数 | 类型 | 说明 | | --------- | ------ | ------------------------------------ | | `fun` | string | 目标函数名 | | `x0` | array | 初值向量 | | `a` | array | 线性不等式约束系数矩阵 | | `b` | array | 线性不等式约束右侧向量 | | `aeq` | array | 线性等式约束系数矩阵 | | `beq` | array | 线性等式约束右侧向量 | | `lb` | array | 变量下界 | | `ub` | array | 变量上界 | | `nonlcon` | string | 非线性约束回调名;无约束时传空字符串 | 返回:array ### 示例 ```tsl return Fmin( "sum", array(0.0), array(), array(), array(), array(), array(-1.0), array(1.0), "" ); // 输出:返回包含最优点和最优值的数组 ``` ## `H_J_CallBack(x, r)` 声明:function H_J算法回调 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------- | | `x` | array | 一维数字数组类型 | | `r` | float | 实数类型 | 返回:float ## `H_J_Method_Pgm(call_back)` 声明:function H_J算法测试 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------------------- | | `call_back` | string | 字符串类型,计算目标值的回调 | 返回:array ## `Hooke_Jeeves_Method(x0, d0, d_min, r, call_back)` 声明:function H-J法求解无约束最优化问题 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------------------- | | `x0` | array | 一维数字数组类型 | | `d0` | array | 一维数字数组类型 | | `d_min` | array | 一维数字数组类型 | | `r` | float | 实数类型 | | `call_back` | string | 字符串类型,计算目标值的回调 | 返回:array ### 示例 ```tsl return Hooke_Jeeves_Method( array(2.0), array(1.0), array(0.01), 0.5, "H_J_CallBack" ); // 输出:返回包含 1 个元素的最优解数组 ``` ## `intLinProg(f, a, b, aeq, beq, int_par)` 声明:function (线性规划,包括整数规划,01规划建议统一使用prog_L函数)解决如下整数规划模型问题 | 参数 | 类型 | 说明 | | --------- | ------------- | -------------------------------------------------------------------------------------------- | | `f` | array of real | 一维实数数组,表示整数规划模型的目标函数系数; | | `a` | array of real | 二维实数数组,表示整数规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; | | `b` | array of real | 一维实数数组,表示整数规划模型带“”约束方程的约束值; | | `aeq` | array of real | 二维实数数组,表示整数规划模型带“=”约束方程系数矩阵; | | `beq` | array of real | 一维实数数组,表示整数规划模型带“=”约束方程的约束值; | | `int_par` | array of real | 一维整数数组,表示要取整数的变量,缺省时表示全部变量取整; | 返回:array ### 示例 求解模型:最大化 `40x1 + 90x2`,约束为 `9x1 + 7x2 <= 56`、`7x1 + 20x2 <= 70`,且 `x1`、`x2` 为非负整数。 范例01:整数线性规划 ```tsl f := array(-40, -90); a := array((9, 7), (7, 20)); b := array(56, 70); aeq := array(); beq := array(); int_par := array(); return intLinProg(f, a, b, aeq, beq, int_par); // 输出:x1=4,x2=2,f(x)=-340 ``` ## `linearProgramming(f, a, b, aeq, beq)` 声明:function (线性规划,包括整数规划,01规划建议统一使用prog_L函数),解决如下线性规划模型问题 | 参数 | 类型 | 说明 | | ----- | ------------- | -------------------------------------------------------------------------------------------- | | `f` | array of real | 一维实数数组,表示线性规划模型的目标函数系数; | | `a` | array of real | 二维实数数组,表示线性规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; | | `b` | array of real | 一维实数数组,表示线性规划模型带“”约束方程的约束值; | | `aeq` | array of real | 二维实数数组,表示线性规划模型带“=”约束方程系数矩阵; | | `beq` | array of real | 一维实数数组,表示线性规划模型带“=”约束方程的约束值; | 返回:any ### 示例 求解模型:最小化 `-5x1 - 4x2 - 6x3`,约束为 `x1 - x2 + x3 <= 20`、`3x1 + 2x2 + 4x3 <= 42`、`3x1 + 2x2 <= 30`,且各变量非负。 范例01:线性规划 ```tsl f := array(-5, -4, -6); a := array((1, -1, 1), (3, 2, 4), (3, 2, 0)); b := array(20, 42, 30); aeq := array(); beq := array(); return linearProgramming(f, a, b, aeq, beq); // 输出:x1=0,x2=15,x3=3,f(x)=-78 ``` ## `NonLP_BSearch(fun, x0, h)` 声明:function 一维盲人搜索方法,目标函数既可以是单峰,也可以是多峰。返回最优点和最优值。(中间函数) | 参数 | 类型 | 说明 | | ----- | ------ | ---------------------------- | | `fun` | string | 目标函数表达式,为字符串类型 | | `x0` | float | 初值,为实数类型; | | `h` | float | 步长,为实数类型; | 返回:array ## `NonLP_Fibonacci(fun, a, b)` 声明:function (一维最小值搜索建议统一使用NonLP_Fminbnd函数),斐波那契法,用斐波那契数列去搜索\[a,b\]区间内目标函数的最小值,返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `a` | float | 区间左侧,为实数类型; | | `b` | float | 区间右侧,为实数类型 | 返回:array ## `NonLP_Fminbnd(fun, a, b, methods)` 声明:function 一维最小值搜索,求解模型如下: min fun(x) | 参数 | 类型 | 说明 | | --------- | ------ | ------------------------------------------------------------------------------ | | `fun` | string | 目标函数(函数名字符串) | | `a` | float | 下界,实数 | | `b` | float | 上界,实数 | | `methods` | any | 方法选择0 :黄金分割法+抛物线法(默认)1 : 盲人收索法2 :黄金分割法3 :斐波那契法 | 返回:array ### 示例 ```tsl return NonLP_Fminbnd("abs", -2.0, 3.0, 0); // 输出:返回包含 X、opt 和 Iter 的结果数组 ``` ## `NonLP_Fminsearch(fun, x0, methods)` 声明:function 无约束最小值求解,求解模型如下: min fun(x) | 参数 | 类型 | 说明 | | --------- | ------ | -------------------------------------------------------------------------- | | `fun` | string | 目标函数,函数名字符串 | | `x0` | array | 初始值,一维数字数组 | | `methods` | any | 方法选择0 单纯形法1 转轴法2 模式搜索法3 拟牛顿下山法(默认方法,推荐使用) | 返回:array ## `NonLP_Golden(fun, a, b)` 声明:function (一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割法搜索\[a,b\]区间内目标函数的最小值,返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `a` | float | 区间左侧,为实数类型; | | `b` | float | 区间右侧,为实数类型 | 返回:array ## `NonLP_GP(fun, a, b)` 声明:function (一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割+抛物线插值法:一维优化方法,返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `a` | float | 区间左侧,为实数类型; | | `b` | float | 区间右侧,为实数类型; | 返回:array ## `NonLP_Hooke_Jeeves(fun, x0)` 声明:function (无约束最小值求解建议统一使用NonLP_Fminsearch函数)模式搜索法,又叫Hooke-Jeeves法,求解无约束多维极值问题,返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型 | 返回:array ## `NonLP_minFactor(fun, x0, aeq, beq, nonlcon)` 声明:function (非线性规划建议统一使用prog_n函数),乘子法求等式约束问题,可求解如下问题 | 参数 | 类型 | 说明 | | --------- | ------ | ------------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型; | | `aeq` | array | 线性矩阵等式约束,为二维数组类型; | | `beq` | array | 线性向量等式约束值,为一维数组类型; | | `nonlcon` | string | 非线性约束回调,为字符串类型; | 返回:array ## `NonLP_minPS(fun, x0, a, b, nonlcon)` 声明:function (非线性规划建议统一使用prog_n函数),坐标轮换法求不等式约束问题,初值必须在可行域内!可求解如下问题 | 参数 | 类型 | 说明 | | --------- | ------ | -------------------------------------- | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型; | | `a` | array | 线性矩阵不等式约束,为二维数组类型; | | `b` | array | 线性向量不等式约束值,为一维数组类型; | | `nonlcon` | string | 非线性约束回调,为字符串类型; | 返回:array ## `NonLP_minSUMT(fun, x0, a, b, aeq, beq, nonlcon, methods)` 声明:function (非线性规划建议统一使用prog_n函数)混合惩罚函数+转轴法/模式搜索法:可解所有优化问题,返回最优点、最优值和迭代次数。可求解如下问题 | 参数 | 类型 | 说明 | | --------- | ------ | -------------------------------------- | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型; | | `a` | array | 线性矩阵不等式约束,为二维数组类型; | | `b` | array | 线性向量不等式约束值,为一维数组类型; | | `aeq` | array | 线性矩阵等式约束,为二维数组类型; | | `beq` | array | 线性向量等式约束值,为一维数组类型; | | `nonlcon` | string | 非线性约束回调,为字符串类型; | | `methods` | string | 方法选择,’NM’,’Rb’,’HJ’ | 返回:array ## `NonLP_Nelder(fun, x0)` 声明:function (无约束最小值求解建议统一使用NonLP_Fminsearch函数)内德-米德法,无约束多维的非线性规划方法,即单纯形法。返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型 | 返回:array ## `NonLP_Range(fun, x0, h)` 声明:function 进退法,可一维优化问题的确定搜索区间,但目标函数必须是单峰函数,返回结果为上下界的取值。(中间函数) | 参数 | 类型 | 说明 | | ----- | ------ | ---------------------------- | | `fun` | string | 目标函数表达式,为字符串类型 | | `x0` | float | 初值,为实数类型; | | `h` | float | 步长,为实数类型; | 返回:array ## `NonLP_Rosenbrock(fun, x0)` 声明:function (无约束最小值求解建议统一使用NonLP_Fminsearch函数)Rosenbrock求无约束多维极值问题,返回最优点和最优值 | 参数 | 类型 | 说明 | | ----- | ------ | ------------------------------ | | `fun` | string | 目标函数表达式,为字符串类型; | | `x0` | array | 初值向量,为一维数组类型 | 返回:array ## `ozProg(f, a, b)` 声明:function (线性规划,包括整数规划,01规划建议统一使用prog_L函数),0-1规划,解决如下0-1整数规划模型问题 返回该0-1规划模型的最小值及其对应变量的取值,其中可以转化为和 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------------------------------------------------------------------- | | `f` | array | 一维实数数组,表示0-1规划模型的目标函数系数; | | `a` | array | 二维实数数组,表示0-1规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; | | `b` | array | 一维实数数组,表示0-1规划模型带“”约束方程的约束值; | 返回:array ### 示例 ```tsl f := array(-3, 2, -5); a := array((1, 2, -1), (1, 4, 1), (1, 1, 0), (4, 0, 1)); b := array(2, 4, 3, 6); ozProg(f, a, b); // 输出:x1=1,x2=0,x3=1,f(x)=-8 ``` ## `Prog_L(f, a, b, aeq, beq, lb, ub, x0, options, ozarr, intarr)` 声明:function 使用单纯形法,和起作用集法,系统默认作用集形法求解线性规划问题,即求解目标都为线性和约束条件都为线性的规划问题 Prog_L(f,A,b) 求解不等式约束 Prog_L(f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_L(f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options) 求解不等式约束、等式约束,上下限约束,加入用户算法设置 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr) 求解不等式约束、等式约束、上下限约束、0-1 约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr,intarr) 求解不等式约束、等式约束、上下限约束、0-1 约束、整数约束 模型表达: min= sum(f\*x) st. A:\*x<=b Aeq :\* x = Beq lb | 参数 | 类型 | 说明 | | --------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `f` | array | 线性目标,一维数字数组,不可缺省 | | `a` | array | 线性约束,二维数字数组,不可缺省 | | `b` | array | 线性约束,一维数字数组,不可缺省 | | `aeq` | array | 线性约束,二维数字数组,缺省为空 | | `beq` | array | 线性约束,一维数字数组,缺省为空 | | `lb` | array | 下界约束,一维数字数组,缺省为空 | | `ub` | array | 上界约束,一维数字数组,缺省为空 | | `x0` | array | 初始值,一维数组 | | `options` | array | 选项设置,数据表类型,缺省为:;array( 'algorithm' :'activeset',//'simplex' 单纯形,'activeset' 作用集法;//(当整数、0-1 约束时推荐使用);'maxiter': 400 , //最大迭代次数;'tolcon': 1.0e-10, //约束容忍误差;'tolfun' : 1.0e-8 , //目标最小误差;'tolx' : 1.0e-8 //变量最小变化) | | `ozarr` | array | 01约束条件,第1个变量为01变量则ozarr := array(0) | | `intarr` | array | 整数约束条件,第2,3两个变量为整数变量则 intarr:=array(1,2);返回结果:;数据表类型;ret\["X"\] : 变量取值,一维数字数组;ret\["Fval"\] :规划目标值,实数;ret\["Error_M"\] : 结果信息,整数;ret\["Iter"\] : 迭代次数,整数 | 返回:array ## `Prog_M(fun, x0, goal, weight, a, b, aeq, beq, lb, ub, nlc, options)` 声明:function 求解多目标规划问题 模型表达: min AttainFactor st. f(x)-AttainFactor\*wight <=goal //目标约束 c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A\*x<=b; //线性不等式约束 aeq\*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `fun` | array | 目标函数,函数名字符串 | | `x0` | array | 初始值 | | `goal` | array | 目标中各个分目标的差,一维数组和目标个数相同 | | `weight` | array | 目标中各个分量的在总体中的比重,一维数组和目标个数相同 | | `a` | array | 不等式约束,二维数组 | | `b` | array | 不等式约束,一维数组 | | `aeq` | array | 等式约束,二维数组 | | `beq` | array | 等式约束,一维数组 | | `lb` | array | 下界,一维数组 | | `ub` | array | 上界,一维数组 | | `nlc` | string | 非线性约束,约束函数名字符串 | | `options` | array | 算法参数设置,默认为:array('maxiter':400, //最大迭代次数'maxfunevals':'100\*numberofvariables', //目标回调最大次数'tolcon':1.0e-6,//约束容忍误差'tolfun' :1.0e-6,//目标最小误差'tolx' :1.0e-6, //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8)// 差分时最小步长 | 返回:array ## `Prog_N(fun, x0, a, b, aeq, beq, lb, ub, nlc, options)` 声明:function 采用拟牛顿下山方法求解非线性规划求解。 Prog_n(fun,x0) 无约束最小值约束 Prog_n(fun,x0,A,B) 非线性不等式约束求解 Prog_n(fun,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB,x0,options) 模型表达 1非线性无约束最小值 min fun(x) 2非线性规划求解 min fun(x) st. c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A\*x<=b; //线性不等式约束 aeq\*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束 | 参数 | 类型 | 说明 | | --------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `fun` | array | 目标函数,目标函数名字符串类型,不可缺省。其中,目标函数的返回值必须是一个实数(1x1的矩阵,或长度为1的数组都不允许) | | `x0` | array | 初始值,一维数字数组,不可缺省 | | `a` | array | 不等式约束,二维数组,缺省为空 | | `b` | array | 不等式约束,一维数组,缺省为空 | | `aeq` | array | 等式约束,二维数组,缺省为空 | | `beq` | array | 等式约束,一维数组,缺省为空 | | `lb` | array | 下界,一维数组,缺省为空 | | `ub` | array | 上界,一维数组,缺省为空 | | `nlc` | array | 非线性约束,函数名,字符串 | | `options` | array | 算法参数设置,默认为array('maxiter':400 , //最大迭代次数'maxfunevals':'100\*numberofvariables', //目标回调最大次数'tolcon':1.0e-6 ,//约束容忍误差'tolfun' :1.0e-6 ,//目标最小误差'tolx' :1.0e-6 , //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8 )// 差分时最小步长 | 返回:array ## `Prog_Q(h, f, a, b, aeq, beq, lb, ub, x0, options)` 声明:function 二次规划问题求解(采用作用集方法) Prog_Q(H,f,A,b) 求解不等式约束 Prog_Q(H,f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_Q(H,f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_Q(H,f,A,b,Aeq,beq,LB,UB,x0,options) 模型表达: min= `x\* H\* x /2 + sum(f\*x) st. A:\*x<=b Aeq :\* x = Beq; lb | 参数 | 类型 | 说明 | | --------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `h` | array | 二次型,正定二次型二维数字数组,不可缺省 | | `f` | array | 线性目标,一维数字数组,不可缺省 | | `a` | array | 线性约束,二维数字数组,不可缺省 | | `b` | array | 线性约束,一维数字数组,不可缺省 | | `aeq` | array | 线性约束,二维数字数组,缺省为空 | | `beq` | array | 线性约束,一维数字数组,缺省为空 | | `lb` | array | 下界约束,一维数字数组,缺省为空 | | `ub` | array | 上界约束,一维数字数组,缺省为空 | | `x0` | array | 初始值,一维数组 | | `options` | array | 选项设置,数据表类型,缺省为array('maxiter': 400 , //最大迭代次数'tolcon': 1.0e-6, //约束容忍误差'tolfun' : 1.0e-6 , //目标最小误差'tolx' : 1.0e-6 //变量最小变化) | 返回:array ## `quadLagR(h, f, aeq, beq)` 声明:function (二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题 | 参数 | 类型 | 说明 | | ----- | ---------------- | ----------------------------------------------------- | | `h` | array,tablearray | 二维实数数组,表示二次项目标函数系数,为对称矩阵 | | `f` | array,tablearray | 一维实数数组,表示二次规划模型的目标函数系数; | | `aeq` | array,tablearray | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; | | `beq` | array,tablearray | 一维实数数组,表示二次规划模型带“=”约束方程的约束值。 | 返回:any ### 示例 求解模型:最小化 `2x1^2 + x2^2 + x1*x2 - x1 - x2`,约束为 `x1 + x2 = 1`。 范例01:带等式约束的二次规划 ```tsl h := Array((4, 1), (1, 2)); f := Array(-1, -1); aeq := array((1, 1)); beq := array(1); return quadLagR(h, f, aeq, beq); // 输出:x1=0.25, x2=0.75, 最小值f(x)=-0.125 ``` ## `quadprog(h, f, a, b, aeq, beq)` 声明:function (二次规划建议统一使用prog_Q函数),解决如下二次规划模型问题 | 参数 | 类型 | 说明 | | ----- | ------------- | -------------------------------------------------------------------------------------------- | | `h` | array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 | | `f` | array of real | 一维实数数组,表示二次规划模型的目标函数系数; | | `a` | array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; | | `b` | array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; | | `aeq` | array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; | | `beq` | array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; | 返回:array ### 示例 求解模型:最小化 `1/2*x1^2 + x2^2 - x1*x2 - 2x1 - 6x2`,并满足文中所列不等式及非负约束。 范例01:带不等式约束的二次规划 ```tsl h := Array((1, -1), (-1, 2)); f := Array(-2, -6); a := Array((1, 1), (-1, 2), (2, 1)); b := array(2, 2, 3); aeq := array(); beq := array(); return quadprog(h, f, a, b, aeq, beq); // 输出:x1=0.6667,x2=1.3333,f(x)=-8.2222 ``` ## `quadTrackRoute(h, f, a, b, aeq, beq, x0)` 声明:function (二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题 | 参数 | 类型 | 说明 | | ----- | ------------- | -------------------------------------------------------------------------------------------- | | `h` | array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 | | `f` | | 一维实数数组,表示二次规划模型的目标函数系数; | | `a` | array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; | | `b` | array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; | | `aeq` | array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; | | `beq` | array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; | | `x0` | array of real | 变量的初始点。 | 返回:array ### 示例 求解模型:最小化 `2x1^2 + 2x2^2 - x1*x2 + 8x1 - 6x2`,约束为 `x1 + x2 <= 2`、`2x1 - x2 <= 1`。 范例01:指定初始点的二次规划 ```tsl h := Array((4, -1), (-1, 4)); f := Array(8, -6); a := Array((1, 1), (2, -1)); b := array(2, 1); aeq := array(); beq := array(); x0 := array(0, 0); return quadTrackRoute(h, f, a, b, aeq, beq, x0); // 输出:x1=-1.733333, x2=1.066667, 最小值f(x)=-10.13333 ``` ## `SUMT_Method(x0, call_back)` 声明:function SUMT法求解有约束最优化问题 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------------------------- | | `x0` | array | 一维数字数组类型,各个变量的初始值 | | `call_back` | string | 字符串类型,计算目标值的回调 | 返回:array ### 示例 ```tsl return SUMT_Method(array(1.0), "Sumt_Method_CallBack"); // 输出:返回包含 1 个元素的最优解数组 ``` ## `Sumt_Method__Pgm()` 声明:function Sumt算法测试 返回:array ## `Sumt_Method_CallBack(x, r)` 声明:function Sumt算法回调 | 参数 | 类型 | 说明 | | ---- | ----- | ---------------- | | `x` | array | 一维数字数组类型 | | `r` | float | 实数类型 | 返回:float ## `tsOptimizer` 声明:class 天软规划求解基类,以面向对象方式封装 `Prog_N`、`Prog_Q` 和 `Prog_L` 来源:depth=3 Source ID:21162 Source URL: ### `Ff` 声明:field 线性目标 可见性:`public` 类型:array ### `Fh` 声明:field 二次型 可见性:`public` 类型:array ### `Fa` 声明:field 线性约束系数矩阵 可见性:`public` 类型:array ### `Fb` 声明:field 线性约束右侧向量 可见性:`public` 类型:array ### `FAeq` 声明:field 线性等式约束系数矩阵 可见性:`public` 类型:array ### `FBeq` 声明:field 线性等式约束右侧向量 可见性:`public` 类型:array ### `FLb` 声明:field 变量下界约束 可见性:`public` 类型:array ### `FUb` 声明:field 变量上界约束 可见性:`public` 类型:array ### `FOzarr` 声明:field 0-1 约束条件 可见性:`public` 类型:array ### `FIntarr` 声明:field 整数约束条件 可见性:`public` 类型:array ### `Fx0` 声明:field 优化初始值 可见性:`public` 类型:array ### `Foptions` 声明:field 算法选项设置 可见性:`public` 类型:array ### `Fresult` 声明:field 优化后的结果 可见性:`public` 类型:array ### `Obj(x)` 声明:function 计算优化目标 可见性:`public` | 参数 | 类型 | 说明 | | ---- | ---- | ------------------------------------ | | `x` | real | 当前优化变量向量,用于计算目标函数值 | 返回:float ### `Con(x)` 声明:function 增加非线性约束 可见性:`public` | 参数 | 类型 | 说明 | | ---- | ----- | -------------------------------------- | | `x` | array | 当前优化变量向量,用于计算非线性约束值 | 返回:array ### `Prog()` 声明:function 执行优化并返回 `Fresult` 可见性:`public` 返回:array ### `Prog_Debug()` 声明:function 查询优化结果并进行约束校验 可见性:`public` 返回:array ### `Prog_Debugprint(space)` 声明:function 打印当前优化结果质量 可见性:`public` | 参数 | 类型 | 说明 | | ------- | ---- | ------------------------------------------------- | | `space` | int | 可选。默认 0。优化结果打印时使用的缩进/格式控制值 | 返回:nil ### `Prog_ConsTest_Linear()` 声明:function 检测当前线性约束是否可行 可见性:`public` 返回:array