⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robotarm.evl

📁 王小平《遗传算法——理论、应用与软件实现》随书光盘
💻 EVL
字号:
CONFIGURATION
    EVAL_SAMPLE = 3;
    GENE_WEIGHT_INC = 2;
    MAX_BEST_ITEM = 10;             ! range 1 - 100
    TEST_TIME = 2.2;                ! second
    MIN_SCORE = 0.600;
    EVAL_NULL_BAND = 0.02;

    MAX_RULE = 12;
    MAX_CYCLE_RATE = 0.100;         ! in second
    MIN_CYCLE_RATE = 0.035;         ! in second
END_CONFIGURATION;

SEGMENT Evaluation

Cycle_time      0.05

!     Name      MIN   MAX
IN    Pos_error (-70.0, 70.0)
IN    Current  (-1.0, 1.0)
OUT   Eval_result (0, 1)
OUT   Reference(0, 70);
!OUT   Position (0, 70);

Local Done (0, 1)
Local Rising_time (0, 3)
Local Err_oscilate (0, 10)
Local Cur_oscilate (0, 10)
Local err (0, 70)
Local cur (0, 1)
Local Err_dir (-1, 1)
Local Old_err_dir (-1, 1)
Local Cur_dir (-1, 1)
Local Old_cur_dir (-1, 1)

!        Name                     Below    Low   High  Above  Truth
Symbol   Very_good   OF Rising_time (  0.0,   0.0,   1.0,   2.0,  1.0)
Symbol   Good        OF Rising_time (  1.0,   2.0,   2.0,   3.0,  1.0)
Symbol   OK          OF Rising_time (  2.0,   3.0,   3.0,   4.0,  1.0)
Symbol   Bad         OF Rising_time (  3.0,   4.0,   4.0,   5.0,  1.0)
Symbol   Very_bad    OF Rising_time (  4.0,   5.0,  10.0,  10.0,  1.0)

Symbol   Under_shoot OF Pos_error (-70.0, -70.0,  -2.0,  -1.0,  1.0)
Symbol   Neg_small   OF Pos_error ( -2.0,  -1.0,  -1.0,   0.0,  1.0)
Symbol   On_target   OF Pos_error ( -1.0,   0.0,   0.0,   1.0,  1.0)
Symbol   Pos_small   OF Pos_error (  0.0,   1.0,   1.0,   2.0,  1.0)
Symbol   Over_shoot  OF Pos_error (  1.0,   2.0,  70.0,  70.0,  1.0)

Symbol   Very_good   OF Eval_result (  0.7,   0.8,   1.0,   1.0,  1.0,  1.0)
Symbol   Good        OF Eval_result (  0.5,   0.7,   0.8,   1.0,  1.0)
Symbol   Mid         OF Eval_result (  0.2,   0.4,   0.6,   0.8,  1.0)
Symbol   Bad         OF Eval_result (  0.1,   0.2,   0.3,   0.4,  1.0)
Symbol   Very_bad    OF Eval_result (  0.0,   0.0,   0.1,   0.2,  1.0,  0.0)

Symbol   No_oscil                   (    0,     0,     1,     1,  1.0)
Symbol   Few_oscil                  (    1,     2,     3,     4,  1.0)
Symbol   Mid_oscil                  (    2,     3,     4,     5,  1.0)
Symbol   Lot_oscil                  (    3,     4,     5,     6,  1.0)
Symbol   Unstable                   (    4,     5,    10,    10,  1.0)

Initialization
    Rising_time = 0;
    Err_Oscilate = 0;
    Cur_Oscilate = 0;
    Eval_result = 0;
    Done        = 0;
    Old_err_dir = 0;
    Old_cur_dir = 0;
    Reference   = 35;
BEGIN
    err = pos_error;
    IF pos_error < 0 THEN
        err = - pos_error;
    ENDIF;
    IF Done = 0 THEN
        IF err > 2 THEN
            Rising_time = Rising_time + Delta_time;
        ELSE
            Done = 1;
        ENDIF;
    ENDIF;

    IF Pos_error = 0 THEN
        Err_dir = 0;
    ELSE
        IF Pos_error > 0 THEN
            Err_dir = 1;
        ELSE
            Err_dir = -1;
        ENDIF;
    ENDIF;
    IF Old_err_dir <> 0 THEN
        IF Err_dir <> Old_err_dir THEN
            IF err > 0.5 THEN
                Err_Oscilate = Err_Oscilate + 1;
            ENDIF;
        ENDIF;
    ENDIF;
    Old_err_dir = Err_dir;

    cur = current;
    IF current < 0 THEN
        cur = - current;
    ENDIF;
    IF current = 0 THEN
        cur_dir = 0;
    ELSE
        IF current > 0 THEN
            cur_dir = 1;
        ELSE
            cur_dir = -1;
        ENDIF;
    ENDIF;
    IF Old_cur_dir <> 0 THEN
        IF cur_dir <> Old_cur_dir THEN
            IF cur > 0.25 THEN
                cur_Oscilate = cur_Oscilate + 1;
            ENDIF;
        ENDIF;
    ENDIF;
    Old_cur_dir = cur_dir;

END;

PRESET  ! 0
    Reference = 70;
!    Position  = 0;
END;

PRESET  ! 1
    Reference = 35;
!    Position  = 40;
END;

PRESET  ! 2
    Reference = 35;
!    Position  = 0;
END;

PRESET  ! 3
    Reference = 35;
!    Position  = 70;
END;

PRESET  ! 4
    Reference = 35;
!    Position  = 25;
END;

IF Pos_error IS Under_shoot
THEN Eval_result IS Very_bad

IF Pos_error IS Neg_small
THEN Eval_result IS Bad

IF Pos_error IS On_target
THEN Eval_result IS Very_good

IF Pos_error IS Pos_small
THEN Eval_result IS Mid

IF Pos_error IS Over_shoot
THEN Eval_result IS Very_bad

!---------------------------
IF Rising_time IS Very_good
THEN Eval_result IS Very_good

IF Rising_time IS Good
THEN Eval_result IS Good

IF Rising_time IS OK
THEN Eval_result IS Mid

IF Rising_time IS Bad
THEN Eval_result IS Very_bad

IF Rising_time IS Very_bad
THEN Eval_result IS Very_bad

!---------------------------
IF Err_Oscilate IS No_oscil !AND Cur_Oscilate IS No_oscil
THEN Eval_result IS Very_good

IF Err_Oscilate IS Few_oscil !AND Cur_Oscilate IS Few_oscil
THEN Eval_result IS Good

IF Err_Oscilate IS Mid_oscil !AND Cur_Oscilate IS Mid
THEN Eval_result IS Mid

IF Err_Oscilate IS Lot_oscil OR Cur_Oscilate IS Lot_oscil
THEN Eval_result IS Bad

IF Err_Oscilate IS Unstable OR Cur_Oscilate IS Unstable
THEN Eval_result IS Very_bad

END Evaluation;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -