function A rrangeh em (const A Item :P ltem ) : Boolean ;
F or F A rran ge do
{
If (not T im eA llow ) or (not R oom A llow ) then C ontinue
If FA rran ge < > n il th en A dd T im elD ,Ro om lD to R T
} R
esult: = Count(R T ) < > 0
If R e su lt th en
I
i: = R andom (C ount(R T ) ) ;
if A h em . Tim elD < > 一1 then FA rrange (A h em ) : = nilFA rrange [RT [i] ] : = A hem
}
p ro cedu re C rossO ver
fo r F E n ab le T im e do
{
G etM a x A Item . C on f l ic t
A d d A Ite m to P M “
} fo
r PM ax do Exchange(P M ax[i] 。P M ax[i+ 1] )
p ro cedu re E n d
p ro cedu re M u tate
f o r F Item do if F hem [i] . C onf lict< > 0 then
ifRandom (100 ) < 50 then A rrangeltem (FItem [i] )
p roc edu re M u tate E nd