• Tidak ada hasil yang ditemukan

Chapter IV: Directive-response Assume-guarantee Contracts for an Auto-

4.4 AVP Contracts

Table 4.4: Trackerdirective-response system.

Interval variables/constantsvar𝑋

𝛿 Corridor map.

πœ€min, 𝑐 π‘Žπ‘Ÿ Minimum safety distance to other cars.

πœ€min, 𝑝 π‘’π‘œ 𝑝𝑙 𝑒 Minimum safety distance to pedestrians.

Outputsvarπ‘Œ

Trackerβ†’Planner An output channel of type ˜B(Tracker).

Trackerβ†’CustomerInterface An output channel of type ˜A(Tracker).

Inputsvarπ‘ˆ

Tracker←Planner An input channel of type ˜A(Planner).

Constraintscon𝑀

Corridor constraints In our implementation, we define the𝛿-corridor for any path𝑝to be the open set containing points whose distance to the closest point in𝑝does not exceed 3 meters.

πœ€min, 𝑐 π‘Žπ‘Ÿ,πœ€min, 𝑝 π‘’π‘œ 𝑝𝑙 𝑒 These values are determined based on the dynamics and the uncertaintyΔ𝐢 π‘Žπ‘Ÿ.

l Figure 4.2: Contracts between the components of the AVP system.

Tracker

A Tracker system is responsible for the safe control of cars that are accepted into the garage by a Supervisor. It receives directives from a Planner consisting of executable paths to track and send responses based on the task status to aPlanner.

See Table 4.4.

Contract 1(CCustomerInterface). The following is the contract for theCustomerInter- face.

β€’ Assumes

– If theCustomerInterfacesends a request to theSupervisor, then they will receive a response from theSupervisor:

βˆ€π‘ ∈C:: ( [π‘š, 𝑐] ∈sendCustomerInterfaceβ†’Supervisor {

βˆƒπ‘Ÿ ∈B(Supervisor) ::[π‘Ÿ , 𝑐] ∈receiveCustomerInterface←Supervisor).

(4.10)

– If the car is healthy and accepted by the garage, it will be returned after being summoned:

βˆ€π‘βˆˆC:: (β‰₯0(𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦)

∧( [Accepted, 𝑐] ∈receiveCustomerInterface←Supervisor∧ [Retrieve, 𝑐] ∈sendCustomerInterfaceβ†’Supervisor) { [Returned, 𝑐] ∈receiveCustomerInterface←Supervisor).

(4.11)

β€’ Guarantees

– When the request is accepted, theCustomerInterfaceshould not tamper with the car controls until the car is returned (i.e., control signals should match the directive) :

βˆ€π‘βˆˆC::βˆ€π‘‘::βˆ€(𝑣 , πœ‘) ∈I::

( [Accepted, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑)

∧¬( [Returned, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑)) β‡’ ( [(𝑣 , πœ‘), 𝑐] ∈receiveCustomerInterface←Tracker(𝑑)

βˆ§βˆ€π‘‘0 < 𝑑:: [(𝑣 , πœ‘), 𝑐] βˆ‰receiveCustomerInterface←Tracker(𝑑0) β‡’ 𝑐 .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠.𝑣(𝑑) =π‘£βˆ§π‘ .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠. πœ‘(𝑑) =πœ‘)).

(4.12)

– When the CustomerInterface is not receiving any new input signal, then it keeps the control inputs at zero:

βˆ€π‘ ∈C::βˆ€π‘‘::

( [Accepted, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑)

∧¬( [Returned, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑)) β‡’ (βˆ€(𝑣 , πœ‘) ∈I::[(𝑣 , πœ‘), 𝑐] ∈receiveCustomerInterface←Tracker(𝑑)

β‡’ βˆƒπ‘‘0 < 𝑑:: [(𝑣 , πœ‘), 𝑐] ∈receiveCustomerInterface←Tracker(𝑑0)) β‡’ 𝑐 .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠.𝑣(𝑑) =0βˆ§π‘ .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠. πœ‘(𝑑) =0))).

(4.13)

– From sending a request until receiving a response, the car must stay in the deposit area:

βˆ€π‘βˆˆC::β‰₯0( [Park, 𝑐] ∈sendCustomerInterfaceβ†’Supervisor

∧[Accepted, 𝑐] βˆ‰receiveCustomerInterface←Supervisor

∧[Rejected, 𝑐] βˆ‰receiveCustomerInterface←Supervisor

⇒𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆˆG.π‘’π‘›π‘‘π‘Ÿ 𝑦_π‘π‘œπ‘› 𝑓 π‘–π‘”π‘’π‘Ÿ π‘Žπ‘‘π‘– π‘œπ‘›π‘ ).

(4.14)

– After the car is deposited, the customer will eventually summon it:

βˆ€π‘ ∈C::[Accepted, 𝑐] ∈receiveCustomerInterface←Supervisor { [Retrieve, 𝑐] ∈sendCustomerInterface←Supervisor.

(4.15)

– Pedestrians will only walk on β€œwalkable” area:

βˆ€π‘ ∈C::β‰₯0( (𝑐 .π‘₯ , 𝑐 . 𝑦) ∈G.𝑀 π‘Žπ‘™ π‘˜ π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Ž). (4.16)

– Pedestrians will not stay on crosswalks forever:

βˆ€π‘ ∈C::( (𝑐 .π‘₯ , 𝑐 . 𝑦) ∈G.𝑀 π‘Žπ‘™ π‘˜ π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Žβˆ©G.π‘‘π‘Ÿ 𝑖 𝑣 π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Ž { (𝑐 .π‘₯ , 𝑐 . 𝑦)βˆ‰G.𝑀 π‘Žπ‘™ π‘˜ π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Žβˆ©G.π‘‘π‘Ÿ 𝑖 𝑣 π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Ž).

(4.17)

– If the car is not healthy and not towed, it cannot move:

βˆ€π‘ ∈C::β‰₯0(¬𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž π‘¦βˆ§ ¬𝑐 .π‘π‘Žπ‘Ÿ .𝑑 π‘œπ‘€ 𝑒 𝑑 β‡’ 𝑐 .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠.𝑣=0βˆ§π‘ .π‘π‘œπ‘›π‘‘π‘Ÿ π‘œπ‘™ 𝑠. πœ‘=0).

(4.18)

– Sending aRetrievemessage must always be preceded by receiving anAccepted message from theSupervisor:

βˆ€π‘ ∈C::[Accepted, 𝑐] ∈receiveCustomerInterface←Supervisor

[Retrieve, 𝑐] ∈sendCustomerInterfaceβ†’Supervisor.

(4.19)

– If a customer receivesRejectedorReturnedfrom theSupervisor, then they must leave the lot forever:

βˆ€π‘ ∈C::βˆ€π‘‘ ::[Rejected, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑)

∨[Returned, 𝑐] ∈receiveCustomerInterface←Supervisor(𝑑) β‡’

βˆƒπ‘‘0> 𝑑 ::β‰₯𝑑0( (𝑐 .π‘π‘Žπ‘Ÿ .π‘₯ , 𝑐 .π‘π‘Žπ‘Ÿ . 𝑦) βˆ‰G.𝑖𝑛𝑑 π‘’π‘Ÿ 𝑖 π‘œπ‘Ÿ).

(4.20)

Contract 2(CSupervisor). The contract for theSupervisoris as follows.

β€’ Assumes

– Towing eventually happens after theSupervisoris alerted of car failure:

βˆ€π‘ ∈C::βˆ€π‘‘::[Failed, 𝑐] ∈receiveSupervisor←Planner(𝑑) β‡’

βˆƒπ‘‘0::β‰₯𝑑0(𝑐 .π‘π‘Žπ‘Ÿ .𝑑 π‘œπ‘€ 𝑒 π‘‘βˆ§ (𝑐 .π‘π‘Žπ‘Ÿ .π‘₯ , 𝑐 .π‘π‘Žπ‘Ÿ . 𝑦) βˆ‰G.𝑖𝑛𝑑 π‘’π‘Ÿ 𝑖 π‘œπ‘Ÿ).

(4.21)

– If a car fails, then thePlannerreportsFailed:

βˆ€π‘ ∈C::¬𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦 { [Failed, 𝑐] ∈receiveSupervisor←Planner. (4.22) – Cars making requests are deposited correctly by the customer:

βˆ€π‘ ∈C::β‰₯0( [Park, 𝑐] ∈receiveSupervisor←CustomerInterface

∧( [Accepted, 𝑐] βˆ‰sendSupervisorβ†’CustomerInterface

∨[Rejected, 𝑐] βˆ‰sendSupervisorβ†’CustomerInterface)

⇒𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆˆG.π‘’π‘›π‘‘π‘Ÿ 𝑦_π‘π‘œπ‘› 𝑓 π‘–π‘”π‘’π‘Ÿ π‘Žπ‘‘π‘– π‘œπ‘›π‘ ).

(4.23)

– If a car is healthy and summoned, then it will eventually appear at the return area and thePlannerwill send aCompletedsignal to theSupervisor:

βˆ€π‘βˆˆC:: (β‰₯0𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž π‘¦βˆ§ [Retrieve, 𝑐] ∈receiveSupervisor←Planner {( [Completed, 𝑐] ∈receiveSupervisor←Planner∧ 𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆˆG.π‘Ÿ 𝑒𝑑 π‘’π‘Ÿ 𝑛_π‘π‘œπ‘› 𝑓 π‘–π‘”π‘’π‘Ÿ π‘Žπ‘‘π‘– π‘œπ‘›π‘ )).

(4.24)

β€’ Guarantees

– All requests from customers will be replied:

βˆ€π‘βˆˆC:: ( [π‘š, 𝑐] ∈receiveSupervisor←CustomerInterface {

βˆƒπ‘Ÿ ∈B(Supervisor):: [π‘Ÿ , 𝑐] ∈sendSupervisorβ†’CustomerInterface).

(4.25)

– The Supervisor cannot send a Returned message to the CustomerInterface unless it has received aCompletedmessage from thePlannerand the car is in the return area:

βˆ€π‘ ∈C::[Completed, 𝑐] ∈receiveSupervisor←Planner

βˆ§π‘ .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆˆG.π‘Ÿ 𝑒𝑑 π‘’π‘Ÿ 𝑛_π‘π‘œπ‘› 𝑓 π‘–π‘”π‘’π‘Ÿ π‘Žπ‘‘π‘– π‘œπ‘›π‘  [Returned, 𝑐] ∈sendSupervisorβ†’CustomerInterface.

(4.26)

– If a car is healthy and aRetrievemessage is received, then the last thing sent to thePlannershould be a directive to the return area (the second configuration

should be one of the return configurations).

βˆ€π‘ ∈C:: (β‰₯0𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦 β‡’ [Retrieve, 𝑐] ∈receiveSupervisor←Planner∧

βˆƒπ‘0, 𝑝1 ∈R3:: [(𝑝0, 𝑝1), 𝑐] ∈sendSupervisorβ†’Planner ∧ βˆ€π‘0

0, 𝑝0

1∈R3::

[(𝑝0

0, 𝑝0

1), 𝑐] ∈sendSupervisorβ†’Planner [(𝑝0, 𝑝1), 𝑐] ∈sendSupervisorβ†’Planner

β‡’ 𝑝1 ∈G.π‘Ÿ 𝑒𝑑 π‘’π‘Ÿ 𝑛_π‘π‘œπ‘› 𝑓 π‘–π‘”π‘’π‘Ÿ π‘Žπ‘‘π‘– π‘œπ‘›π‘ .

(4.27) – If the car is healthy and if it is ever summoned, then theSupervisorwill send a

Returnedmessage to its owner:

βˆ€π‘ ∈C::(β‰₯0𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦 β‡’ [Retrieve, 𝑐] ∈receiveSupervisor←CustomerInterface { [Returned, 𝑐] ∈sendSupervisorβ†’CustomerInterface).

(4.28)

– If there is a not-yet-responded-toParkrequest and the parking lot capacity is not yet reached, then theSupervisorshould accept the request:

βˆ€π‘βˆˆC::βˆ€π‘‘::βˆƒ[Park, 𝑐] ∈receiveSupervisor←CustomerInterface(𝑑)

βˆ§βˆ€π‘‘0≀ 𝑑::[Rejected, 𝑐] βˆ‰sendSupervisorβ†’CustomerInterface(𝑑0)

∧[Accepted, 𝑐] βˆ‰sendSupervisorβ†’CustomerInterface(𝑑0)

βˆ§π‘›π‘’π‘š_π‘Ž 𝑐𝑑𝑖 𝑣 𝑒_𝑐𝑒 𝑠𝑑 π‘œπ‘š π‘’π‘Ÿ 𝑠(𝑑) <G. 𝑝 π‘Žπ‘Ÿ π‘˜ 𝑖𝑛𝑔_𝑠 𝑝 π‘œπ‘‘ 𝑠

β‡’ βˆƒπ‘‘00 > 𝑑:: [Accepted, 𝑐] ∈sendSupervisorβ†’CustomerInterface(𝑑00).

(4.29)

– For everyAcceptedto orRetrievefrom theCustomerInterfaceorBlocked from thePlanner, theSupervisorsends a pair of configurations to thePlanner, the first of which is the current configuration of the car and such that there exists a path of allowable curvature :

βˆ€π‘ ∈C:: [Accepted, 𝑐] ∈sendSupervisorβ†’CustomerInterface

∨[Retrieve, 𝑐] ∈receiveSupervisor←CustomerInterface

∨[Blocked, 𝑐] ∈receiveSupervisor←Planner {

βˆƒπ‘˜0, π‘˜1∈R3:: [(π‘˜0, π‘˜1), 𝑐] =Supervisorβ†’Planner

βˆ§π‘˜0 =𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆ§ βˆƒπ‘ ∈P::πœ…-feasible(𝑝)

βˆ§π‘Λœ(0) =π‘˜0βˆ§π‘Λœ(1) =π‘˜1.

(4.30)

Contract 3(CPlanner). The contract for thePlanneris as follows:

β€’ Assumes

– When theTrackercompletes its task according to the corridor map𝛿, it should send a report to thePlanner:

βˆ€π‘ ∈C::βˆƒπ‘ ∈P::βˆ€π‘0 ∈P::

[𝑝0, 𝑐] ∈sendPlannerβ†’Tracker [𝑝, 𝑐] ∈sendPlannerβ†’Tracker∧ 𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ π‘’βˆˆΞ“π›Ώ(𝑝,1) { [Completed, 𝑐] ∈receivePlanner←Tracker.

(4.31)

– If theTrackersees a failure, it should report to thePlanner:

βˆ€π‘ ∈C::¬𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦 { [Failed, 𝑐] ∈receivePlanner←Tracker. (4.32)

β€’ Guarantees

– When receiving a pair of configurations from theSupervisor, thePlannershould send a path to theTrackersuch that the starting and ending configurations of the path match the received configurations, or if this is not possible, sendBlocked to theSupervisor:

βˆ€π‘βˆˆC::βˆƒ(𝑝0, 𝑝1) ∈R6:: [(𝑝0, 𝑝1), 𝑐] ∈receivePlanner←Supervisor

{ (βˆƒπ‘ ∈P:: Λœπ‘(0)= 𝑝0βˆ§π‘Λœ(1) = 𝑝1∧ [𝑝, 𝑐] ∈sendPlannerβ†’Tracker

∨[Blocked, 𝑐] ∈sendPlannerβ†’Supervisor).

(4.33)

– Only send safe paths withπœ…-feasible curvature:

βˆ€π‘ ∈C::βˆƒπ‘ ∈P:: [𝑝, 𝑐] ∈sendPlannerβ†’Tracker β‡’ πœ…-feasible(𝑝) βˆ§Ξ“π›Ώ(𝑝) βŠ†G.π‘‘π‘Ÿ 𝑖 𝑣 π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Ž .

(4.34)

– If receiving a task status update from theTracker, eventually forward it to the Supervisor:

βˆ€π‘ ∈C::[π‘š, 𝑐] ∈receivePlanner←Tracker

βˆ§π‘š ∈ {Failed,Completed}{ [π‘š, 𝑐] ∈sendPlannerβ†’Supervisor.

(4.35)

– If thePlannerreceives aBlockedsignal from theTracker, it attempts to fix it, otherwise forwards it to theSupervisor:

βˆ€π‘ ∈C::βˆ€π‘‘ ::[Blocked, 𝑐] ∈receivePlanner←Tracker(𝑑) β‡’

βˆƒπœ€ ∈Rβ‰₯0:: (βˆƒπ‘ ∈P::[𝑝, 𝑐] ∈sendPlannerβ†’Tracker(𝑑+πœ€)∧

βˆ€π‘‘0 < 𝑑+πœ€:: [𝑝, 𝑐] βˆ‰sendPlannerβ†’Tracker(𝑑0)

∨[Blocked, 𝑐] ∈sendPlannerβ†’Supervisor(𝑑+πœ€)).

(4.36)

Contract 4(CTracker). The contract for the tracking component is as follows:

β€’ Assumes

– Any path command from thePlanneris alwaysπœ…-feasible, the corresponding corridor is drivable, and the car configuration upon receiving the command is in the initial portion of the corridor:

βˆ€π‘ ∈C::βˆ€π‘ ∈P::βˆ€π‘‘:: starts_at( [𝑝, 𝑐] ∈receiveTracker←Planner, 𝑑)∧

πœ…-feasible(𝑝) βˆ§π‘ .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ 𝑒(𝑑) βˆˆΞ“π›Ώ(𝑝,0) βˆ§Ξ“π›Ώ(𝑝) βŠ†G.π‘‘π‘Ÿ 𝑖 𝑣 π‘Ž 𝑏𝑙 𝑒_π‘Žπ‘Ÿ 𝑒 π‘Ž . (4.37) – Commands are not modified by theCustomerInterface:

See (4.12) and (4.13). (4.38)

β€’ Guarantees

– Make sure car stays in the latest sent𝑝’s corridorΓ𝛿(𝑝):

βˆ€π‘ ∈C::βˆ€π‘‘::βˆƒπ‘ ∈P::βˆ€π‘0 ∈P::

( ( [𝑝, 𝑐] ∈receiveTracker←Planner(𝑑) ∧ [𝑝0, 𝑐] ∈receiveTracker←Planner(𝑑)) β‡’ ( [𝑝0, 𝑐] ∈receiveTracker←Planner [𝑝, 𝑐] ∈receiveTracker←Planner)) β‡’ 𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ 𝑒(𝑑) βˆˆΞ“π›Ώ(𝑝).

(4.39) – Tracking command inputs are compatible with cars:

βˆ€π‘ ∈C::β‰₯0( [(𝑣 , πœ‘), 𝑐] ∈sendTrackerβ†’CustomerInterface β‡’ 𝑣min β‰€π‘£βˆ§π‘£ ≀𝑣maxβˆ§πœ‘min ≀ πœ‘βˆ§πœ‘ β‰€πœ‘max).

(4.40)

– Never drive into a dynamic obstacle (customer or car):

βˆ€π‘1, 𝑐2 ∈C::β‰₯0( (𝑐1≠𝑐2β‡’ k (𝑐1.π‘π‘Žπ‘Ÿ .π‘₯ , 𝑐1.π‘π‘Žπ‘Ÿ . 𝑦) βˆ’ (𝑐2.π‘π‘Žπ‘Ÿ .π‘₯ , 𝑐2.π‘π‘Žπ‘Ÿ . 𝑦) k β‰₯πœ€min, 𝑐 π‘Žπ‘Ÿ)∧

k (𝑐1.π‘π‘Žπ‘Ÿ .π‘₯ , 𝑐1.π‘π‘Žπ‘Ÿ . 𝑦) βˆ’ (𝑐2.π‘₯ , 𝑐2. 𝑦) k β‰₯ πœ€min, 𝑝 π‘’π‘œ 𝑝𝑙 𝑒)).

(4.41)

– If a car fails, it must report to thePlanner:

βˆ€π‘βˆˆC::¬𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž 𝑦 {[Failed, 𝑐] ∈sendTracker←Planner. (4.42) – If a car is healthy, then it must β€œtrack” the last sent path from thePlanner:

βˆ€π‘βˆˆC::β‰₯0𝑐 .π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž π‘¦βˆ§ βˆƒπ‘ ∈P::βˆ€π‘0 ∈P::

[𝑝0, 𝑐] ∈receiveTracker←Planner [𝑝, 𝑐] ∈receiveTracker←Planner

β‡’ βˆƒπ‘‘::𝑐 .π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ 𝑒(𝑑) βˆˆΞ“π›Ώ(𝑝,1).

(4.43)

Figure 4.3: Implementation of the Planner component.

– When theTrackercompletes its task according to a corridor map𝛿, it should send a report to thePlannermodule:

See (4.31). (4.44)

– If a car is blocked (i.e., there is a failed car in its current corridor), then the Tracker must reportBlockedto thePlanner:

βˆ€π‘βˆˆC::βˆ€π‘‘::βˆƒπ‘ ∈P:: ( [𝑝, 𝑐]receiveTracker←Planner(𝑑)::

βˆ€π‘0∈P:: [𝑝0, 𝑐] ∈receiveTracker←Planner(𝑑0)

β‡’ [𝑝0, 𝑐] ∈receiveTracker←Planner [𝑝, 𝑐] ∈receiveTracker←Planner) β‡’ (βˆƒπ‘0∈C::𝑐0β‰ π‘βˆ§ ¬𝑐0.π‘π‘Žπ‘Ÿ . β„Žπ‘’ π‘Žπ‘™ 𝑑 β„Ž π‘¦βˆ§π‘0.π‘π‘Žπ‘Ÿ .𝑠𝑑 π‘Žπ‘‘ 𝑒(𝑑) βˆˆΞ“π›Ώ(𝑝) {[Blocked, 𝑐] ∈sendTrackerβ†’Planner).

(4.45)