.


:




:

































 

 

 

 


CLP - CLP(R)




:?- 1 + = 5.

Prolog , Prolog "". , X , "+ " , X = 4 . "=" is , CLP(R) . ( SICStus Prolog) CLP(R) :

?- { 1 + X = 5!. % X = 4

, , . Prolog , . . Prolog, , - . Cl. C2 : <; Cl, C2, )

:

Exprl Operator Expr2

Exprl, 2 . , CLP(R), , sin;X). Operator , .

=. .

=\=. .

<,_<, >, >=. .

306 II. Prolog


 

, , , Prolog.

Prolog is, , :

convert; Centigrade, Fahrenheit):-Centigrade is (Fahrenheit - 32)*5/9.

35 , , , is , , . , , , , . CLP(R), , , , .

convert E Centigrade, Fahrenheit):-

{ Centigrade = [Fahrenheit - 32) *S/9).?- convert (35, F). F = 95

?- convert (C, 95). = 35

CLP{R) , :

?- convert! , F). t F = 32.0 + 1.8* }

, , : F , . , , CLP, convert.

, , . .

?- (3* - 2*Y = 6, 2*Y = X}.

X - 3.0

- 1.5

?- { 1 =< -2, Z =< 6-, 2 + 1 = 2).

= 1.0

{X >= 3.0}

(X =< 5.0}

CLP(R) , , . CLP(R):

minimize! Expr) maximize(Expr)

Expr , . , , , .


14.



■?- { X =< 5), maximize(X).
X - 5.0
?- { X =< 5, 2 =< X}, minimize (2*X + 3)
X = 2.0
?- { X >-2, Y >=2, Y -< X+l, 2*Y -< 3-,
X - 4.0
Y = 2.0
Z = 14.0
?- { X =< 5}, minimize! X).
no  

S


2*X + 3*Y}r maximize(2)


X , .

CLP(R) ( ) ( ) :

supf Expr, MaxVal)

inf(Expr, MinVal)

Expr , a MaxVal MinVal , , . maximize/1 minimize/1, Expr , ,

?- { 2 =< X =< 5), inf( X, Min), sup; X, ].

Max =5.0

Min -2.0

(X >- 2.0J

{X =< 5.0

?- (X >=2, Y >=2, Y -< X+l, 2*Y =< 8-X, 2 = 2*X + 3*Y},

sup (Z,Max), inflZ.Min), maximize (Z).

X = 4.0

Y = 2. 0

Z = 14.0

- 14.0

Min = 10.0

, , d CLP(R) :

?- ( + 2=<= , %
+ 2 =< , %
+ 3 =< Td, %
+ 5 =< Tf, %
Td + 4 = < Tf }, %
minimize(Tf),  
= 0.0  
Tb = 2.0  
Td = 5.0  
Tf 9.0  
{ -< 4.0}  
{ >= 2.0>  

d Tf

d Tf


, Prolog. fib { N, F) - : F (0) -1, F(l)l, (2)2, F<3)-3, (4)=5 .. N > 1, F(N> = F(N-l) + F (N-2). fib/2 Prolog.

fib(, F):-N=0, F=l

-1, F=l

308 II. Prolog



>1,

N1 is H-l, fib(Hl.Pl), N2 is H-2, fib{N2,F2), F is Fl + F2.

, :?- fib(6, }. F=13

, ^:?- fib CM, 13).

, N > 1 - . , CLP(R), , ,

fib (N, ):-i N = , F - 13

'( - 1, F-1}

t > 1, F = F1+F2, HI -S-1, N2 = -2 fib( HI, Fl), fib( N2, F2>.

. , F :?- fib(N, 13). N = 6

, :?- fib{ , 4}.

F1 F2, Fl + F2 = 4. F1 F2 , 4. , 4, 4. , . , , , fib, . , N F(N) £ N. N1, Fl, N2 F2 : F1 >= N1, F2 >= N2. fib.

fib(S, F):-

{ > 1, F = F1+F2, Hi = -1, N2 = 8-2,

F1 >= HI, F2 >- 2}, % fib( HI, Fl), fib(82 F2).

, :

?- fib , 4).

fib

F F = 4:

4 - F - Fl + F2 =

Fl' + F2' + F2 =

1< ' + F2" + F2" + F2


14.



. , , .

CLP(Q), CLP(R). , CLP(R) , Q , .. , . . Q R ( ) , , . .

?- (X=2*Y, Y=l-X }.

CLP(Q) : X = 2/3, Y = 1/3. CLP{R) : X = 0.666666666, Y = 0.333333333.

14,3. , "?-fib(N, 4;.", , , .

CLP

, , .

7;,...,:..

Di........ Dn .

, , :

prec(Ti,?,!

, . , Tj.

::., .

: ( ).

, ,
.
. ,
:
,
.
CLP :
, S1,..., Sn, ,
, 1........ .

. , ,

310 II. Prolog


. , , . , . , , , prec (a, b). , Da, b Sa Sb. , Sa sb : { + Da -< Sb }

, , . 0, FinTime : { Si >- 0, Si + Di =< FinTime }

: tasksC [Taskl/Durationl, Task2/Duration2,...])

. prec(Taskl, Task2)

Taskl 2. resource! Task, [ Procl, Proc2,...])

, Task

Procl, Proc2................. , -

, 12 ( 12.3), . . 12 , , .

. . 14.1. , 14.1, . , . schedule! Schedule, FinTime)

Schedule , tasks prec, a FinTime . :

Schedule = [ Taskl/Startl/Durationl, Task2 /Start2/Duration2,...]

14.1.

I ■.::.■..'

scheduler Schedule, FinTime):-tasks TasksDurs), precedence_constr{ TasksDurs, Schedule, FinTime), %

% minimize! FinTime).

precedence_constr([1, [], FinTime).


14.



precedence_constr([T/D ] TDs], [T/Start/D | Rest], FinTime):-

{ Start >- 0, %

Start + D =< FinTime}, % FinTime precedence_constr(TDs, Rest, FinTime), prec_constr(T/Start/D, Rest).

pzec_constx [ _, []).

prec_constr(T/S/D, [T1/S1/D1 I Rest]):-

(prec(T, Tl;,!, t S+D -< SI}

s precl Tl, T),!, { Sl + Dl =< S)

true),

prec_constr(T/S/D, Rest).

% ,

tasks; [ tl/5, t2/7, t3/10, t4/2, t5/9L>.

%

prec[ tl, t2). prec(tl, t-4). prec (t2, t3). prec i t4, t5).

schedule, , .

1. , .

2. ,

, , CLP(R) .

pracedeiice_constrTasksDuraticns, Schedule, FinTime)

Schedule FinTime. prec_constr[ Task/Start/Duration, RestOfSchedule)

Start Task RestOfSchedule , .

, 14.1, . - :

?- schedule; Schedule, FinTime).

FinTime = 22,

Schedule = [tl/0/5, t2/5/7, t3/12/10,t4/S4/2,t5/S5/9],

(SS =< 13)

{S4 >= 5}

(S4-S5 =< -2)

t4 t5 . 3 4 S5 t4 t5 . (tl, t2 t3) , .



II. Prolog


. , , 12 (. 12.3, . 12.6), . , , .

.

1. .

2. .

, , 14.1. . . , Ti , Pi, . :

Schedule = [ Taskl/Frocl/Startl/Durl, Task2/Proc2/Start2/Dur2,...]

Procl , Taskl, Startl Taskl Durl . , 14.2, 14.1. schedule (BestSchedule, BestTime)

BestTime. , , :

precedence^onstr ( TasksDurations, Schedule, FinTime!

14.2. CLP(R)

& CLP

schedule (BestSchedule, EestTime):-tasks{ TasksDurs), precedence_constr{ TasksDurs, Schedule, FinTime), % ,

\
initialise bound, %

%
assign_processors{ Schedule, FinTime), '--.
minimize(FinTime),
update_bound(Schedule, FinTime),
fail \ ,

bestsofar(BestSchedule, EestTime). %

% precedence_constr { TasksDurs, Schedule, FinTime):

% , ^

, Schedule, -:
% , .

% FinTime

,

precedence_constr{ [], [], FinTime).

precedenee_constr ([T/D | TDs), [T/Proc/Start/D [ Rest], FinTime):-

{ Start >- 0, % 0

Start + D =< FinTime }, % FinTime

precedence_Constr(TDs, Rest, FinTime;,


14.



prec_Constr(T/Proc/Start/D, Rest).

prec_constr(_, [}).

prec_constr[ T/P/S/D, [T1/P1/S1/D1 I Rest]):-(~prec(T, 11), 1, { S+D =< SI}

precf Tl, T), i, { Sl+Dl =< S}

true), prec_constr (T/P/S/D, Rest).

I assign_prccessors(Schedule, FinTime}:

% Schedule

assign^processors I [], FinTime).

assign_processors { [T/P/S/D | Rest], FinTime}:-

assign_Drocessors(Rest, FinTime),

resource; T, Processors), %

4 Processors
member(p, Processors), %

resource_constr (T/P/S/D, Rest}, %
bestsofarf _, BestTimeSoFarj,
(FinTime < BestTimeSoFar }. %

%

% resource__coristr (ScheduledTask, TaskList):

, I ScheduledTasJc TaskList

resource_constr(_, []).

resource COnetr< Task, [Taskl I Rest]) ; -

no_conflict(Task, Taskl), resource_constr (Task, Rest).

no_conflict[ T/P/S/D, T1/P1/S1/D1)

P \PI,! %

prec{ T, Tl),! %

prec{ Tl, T),! %

(-S+D =< 51 % ,-

Sl+Dl =< S}. initialise_bound: -retract (feestsefar (_,_}>, fail

assert! bestsofarf dummy_schedule, 9999)). % , 9999

% update_bound[ Schedule, FinTime):

*

update_bound(Schedule, FinTime):-retract (bestsofar[_,_)),!, assert(bestsofar(Schedule, FinTime]).

% ,

tasks! [tl/4,t2/2,t3/2, t4/20, t5/20, t6/ll, t7/ll]).



II. Prolog


-

[ tl, t4), prec(tl, t5). precC t2, t4). prec(t2, t5). prect t2, t6). prec(t3, t5). prect t3, t>. prec< t3, tl).

i resource) Task, Processors):

% Processors, Task

resource) _, [1,2,3]). % ,

%

14.1. .

. , . , . , , , . , 14.2, . , . ( , fail). . , ( bestsofar). . , , .

, 14.2, . assign_processors . , , , . . , - , . , FinTime , . : (FinTime < BestTimeSoFar }

, . , . , FinTime < BestTimeSoFar , ; .. , , . ,


14.



. , , , ' , . , .

, - . , BestTimeSoFar, . , , , . , , . , - , .

14.2 (. . 12.6), . , , , .?- schedule Schedule, FiiiTime]. FinTime = 24

Schedule = t tl/3/0/4,12/2/0/2,13/1/0/2, t4/3/4/20, t5/2/4/20, 16/1/2/11,17/1/13/11]

11 , , t2 2, 0 .. . , - . , , . , , , 1 t7 t6 1 2. , resource. , , , . , , , , , .

14.4. , 14.1. , , . ?

14.5. , 14.2, (best sofa ) , . , . , , , , , . , ,

316 II. Prolog


( ). . , .





:


: 2015-10-01; !; : 494 |


:

:

, .
==> ...

1361 - | 1172 -


© 2015-2024 lektsii.org - -

: 0.112 .