Prog_L
简述
使用单纯形法,和起作用集法,系统默认作用集形法求解线性规划问题,即求解目标都为线性和约束条件都为线性的规划问题
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<x<ub
x = (0 or 1)
x = integer
Prog_L (f:array;A:array;B:array;Aeq:array;Beq:array;Lb:array;Ub:array;x0:array;options:array;ozarr: array;intarr:array):array;
名称 | 类型 | 说明 |
---|
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"] : 迭代次数,整数
结果信息"Error_M"含义 |
1 |
函数得到收敛的解 |
3 |
目标函数值变化小于设定精度 |
4 |
发现局部最优值 |
5 |
方向倒数小于精度 |
0 |
达到迭代次数 |
-1 |
算法终止 |
-2 |
没有发现可行解 |
-3 |
发散问题 |
-4 |
无可行下降方向 |
-7 |
不能继续求解,问题可能病态 |
|
f := array(-2,-3);
a := array((1,2),(4,0),(0,4)); //二维数组
b := array(-2,6,2); //一维数组
aeq := array(); //二维数组
beq := array(); // 一维数组
lb := array(); //一维数组
ub := array(); //一维数组
//options := array(); //算法设置采用默认精度
ozarr := array(0) ; // 设置第0 个变量为0 or1;
intarr := array(); // 整数约束为空;
x0 := array(1,2);
ret := prog_L(f,a,b,aeq,beq,lb,ub,x0,options,ozarr,intarr);
return ret;
结果:
Prog_Q Prog_N Prog_M NonLP_Fminsearch NonLP_Fminbnd