前一阵编写优化设计约束优化的程序,被可行方向法复杂的计算流程搞晕了,如下为其计算步骤


步骤的复杂关键在于各步程序之间的跳转,为了跳转要相应的修改一些变量的值,要准备一些变量,要考虑的细节复杂的很啊。
想到曾经接触过状态机,考虑用状态机实现各步之间的跳转,代码大概如下
flag = 1;
while flag ~= -1
switch
flag
case 1
xk = x0;
flag = flag + 1;
case 2
dk = -getGradsVector(FuncNo, xk);
dk = dk/norm(dk);
flag = flag + 1;
case 3
t = GetTestStep(FuncNo, xk ,dk);
flag = flag + 1;
case 4
flagInRange = getConstraintCondition(FuncNo, xk + t*dk,
delta);
flag = flag + 1;
case 5
switch flagInRange
case 0
flag = 9;
case 1
if getFuncValue(FuncNo, xk + t*dk) >
getFuncValue(FuncNo, xk)
flag = 6;