holds(t, velocity(ball, vx, vy)) <=> holds(t+1, velocity(ball, vx+ax, vy+ay))
holds(t, location(ball, x, y)) <=> holds(t+1, location(ball, x+vx, y+vy))
holds(t, acceleration(ball, ax, ay)) and not abnormal1(t) =>
holds(t+1, acceleration(ball, ax, ay))
holds(t, kick_action(ball, Fx, Fy)) =>
abnormal1(t-1) and abnormal1(t) and
holds(t, acceleration(ball, Fx/M, Fy/M)) and
holds(t+1, acceleration(ball, default_ax, default_ay))
Where ball is a constant presumed to be the ball, and the default_ax and
default_ay are constant accelerations - we can assume 0 here. To represent
friction they need to depend on vx and vy.
holds(t, closer(team, p1, p2)) <=>
(holds(t, location(p1, x1, y1)) and holds(t, location(t, x2, y2))
and ((team = team1 and x1 < x2) or (team = team2 and x1 > x2)))
holds(t, less-than-3-closer(team, p)) <=>
((holds(t,closer(team, p1, p)) and holds(t,closer(team, p2, p)) and
member(p1, team) and member(p2, team)) => (p1 = p2))
holds(t, offside(team)) <=>
(exists p1, p2, team1, t1 < t
member(p1, team) and member(p2, team) and is-team(team1) and
not (team1=team) and
holds(t, touch(p1, ball)) and
holds(t1, touch(p2, ball)) and
holds(t1, less-than-2-closer(team1, p1)) and
not (exists t2, p player(p) and holds(t2, touch(p, ball))
and t1 < t2 < t))
holds(t, goal(team)) <=>
(holds(t, in-play) and holds(t, location(ball, x, y)
and goal-line(team1, x, y) and is-team(team1) and not (team = team1))
holds(t, goal(team)) => not holds(t+1, in-play)
State (X component): (ax, vx, x)'
Now, the transition matrix A will be:
0 0 0
1 1 0
0 1 1
And the observation matrix C is: (0 0 1)
We need to compute the rank of the matrix:
C
C A
C A A
The matrix is:
0 0 1
0 1 1
1 2 1
Since its rank is 3, the system is completely observable.
kx delta(0) + k1x delta(T) in the X dimension, and likewise ky delta(0) + k1y delta(T) in the Y dimension, Where: delta(t) is the dirac impulse function at time t, and kx = -vx + dx/T ky = -vy + dy/T k1x = -dx/T + 1 k1y = -dy/T
project(distance(X,Y, X1, Y1) <= 10,
kick(P, ball, to_goal(Team)),
[0, 3], goal(Team1)) :-
player(P) and member(P, Team1) and location(ball, X, Y)
and team(Team) and team(Team1) and goal_at(Team, X1, Y1).
project(holding(P, ball) and location(P, X, Y),
move(X, Y, X1, Y1,),
V/distance(X, Y, X1, Y1),
holding(P, ball) and location(P,X1,Y1) and location(ball,X1,Y1)) :-
player(P) and player_speed(V).
project(location(P, X, Y), move(X, Y, X1, Y1,), V/distance(X, Y, X1, Y1),
location(P,X1,Y1)) :-
player(P) and player_speed(V).
project(location(P, X, Y) and location(ball, X, Y), grab(P, ball), 0,
holding(P, ball)) :- player(P).
to_do(achieve(goal(Team)), Interval,
plan([achieve(holding(P, ball)), move(X, Y, X1, Y1),
kick(P, ball, to_goal(Team1))],
[end(1) < begin(2), end(2) < begin(3)],
[protect(end(1), begin(3), holding(P, ball)),
protect(end(2), begin(3), location(P, X1, Y1))]) :-
player(P) and team(Team) and team(Team1) and not (Team1=Team) and
holds(begin(2), location(P, X, Y)) and goal_at(Team1, X2, Y2) and
distance(X1, Y1, X2, Y2) < near_goal_threshold.
to_do(achieve(holding(P, ball)), Interval,
plan([achieve(location(P, X, Y)), grab(P, ball)],
[end(1) = begin(2)]) :-
holds(end(1), location(ball, X, Y)).
to_do(achieve(holding(P, ball)), Interval, wait_for_pass).
achieve(holding(P, ball)) move(X, Y, X1, Y1) kick(P, ball, to_goal(Team1))Temporal ordering is unique. Now, there are 2 possibilities to decompose achieve(holding(P, ball)): either wait for a pass, or the plan to move to the ball and grab it. The former decomposition succeeds, but since we do not have a project axiom for wait_for_pass, we will FAIL to prove that a goal is scored! So, we need to use the other decomposition, achieve(holding(P, ball)) into:
achieve(location(P, X, Y)) grab(P, ball)Actually, we now have a problem as there is no way to decompose the former - but let use use the decomposition to the primitive move(X1, Y1, X, Y) (i.e. assume we have this to_do axiom). We now have a complete plan, and need to show that it can work. Assume that (with x axis in a line connecting middle of goals):
holds(T, location(p1, 50, 0)) holds(T, location(ball, 40, 0))Now we have a problem, as we do not know the location of the ball at the after the move! However, if we assume a ball initially stationary, and stays so unless moved by player, we get the final task decomposition into the actions (assuming "near goal" is 10):
move(50, 0, 40, 0), grab(P, ball), move(P, 40, 0, 10, 0), kick(P, ball, to_goal(other_team))
Deadline: Tuesday, April 30, 2002
It is heavily suggested that you use the following predicates
(in addition to the standard predicates, such as equality, the ``holds''
relation, etc.).
Otherwise, you will have to invent your own, which is MUCH harder...
Use constants of your choice, such as for the team names,
etc.
The first 6 predicates are ``fluents'', i.e. they change over time. The latter 2 may be assumed to be time independent (even though not true in the real world, as any soccer fan knows).
You also need to define a (prefereably cartesian) coordinate system, for example with (0, 0, 0) being one of the field corner points (make a drawing, for convenience!)
Note that submission here is INDIVIDUAL, not in groups.