outminmax_translate(j:nat,rf)(omm): Outminmax = IF j < length(omm`lb_var) AND j<length(omm`ub_var) THEN
omm WITH [lb_var := setnth(omm`lb_var,j,rf),
ub_var := setnth(omm`ub_var,j,rf)] ELSE
omm ENDIF
length_eq?(nvars)(omm): bool =
(cons?(omm`lb_var) OR cons?(omm`ub_var)) IMPLIES
length(omm`lb_var) = nvars AND length(omm`ub_var) = nvars
%% Combine in the same interval
combine(omm1,omm2): Outminmax = LET lbmax = IF null?(omm1`lb_var) THEN omm2 ELSIF null?(omm2`lb_var) OR omm1`lb_max <= omm2`lb_max THEN omm1 ELSE omm2 ENDIF,
ubmin = IF null?(omm1`ub_var) THEN omm2 ELSIF null?(omm2`ub_var) OR omm1`ub_min >= omm2`ub_min THEN omm1 ELSE omm2 ENDIF IN (#
lb_min := min(omm1`lb_min,omm2`lb_min),
lb_max := IF null?(lbmax`lb_var) THEN 0 ELSE lbmax`lb_max ENDIF,
lb_var := lbmax`lb_var,
ub_max := max(omm1`ub_max,omm2`ub_max),
ub_min := IF null?(ubmin`ub_var) THEN 0 ELSE ubmin`ub_min ENDIF,
ub_var := ubmin`ub_var,
max_depth := max(omm1`max_depth,omm2`max_depth),
splits := 0
#)
%% Combine left and right intervals
combine_lr(v,omm1,omm2): Outminmax =
combine(outminmax_translate(v,LAMBDA(x:real):x/2)(omm1),
outminmax_translate(v,LAMBDA(x:real):(x+1)/2)(omm2)) WITH [
splits := omm1`splits + omm2`splits + 1
]
% omm1 is child, omm2 is father
combine_l(v,omm1,omm2): Outminmax =
combine(outminmax_translate(v,LAMBDA(x:real):x/2)(omm1),omm2) WITH [
splits := omm1`splits + 1
]
% omm2 is father, omm1 is child
combine_r(v,omm1,omm2): Outminmax =
combine(outminmax_translate(v,LAMBDA(x:real):(x+1)/2)(omm1),omm2) WITH [
splits := omm1`splits + 1
]
% is omm2 between omm1?
between?(omm1,omm2): bool =
cons?(omm1`lb_var) AND cons?(omm1`ub_var) AND
omm1`lb_max <= omm2`lb_min AND omm2`ub_max <= omm1`ub_min
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.