% % Reward Function 2 % % Take into account not only the traveling distance but also crew tiredness % and region familiarity % :- dynamic(reward/2). reward(0, s0). reward(0, do(A, S)):- not A = mobilizeS(_, _, _). reward(R, do(A, S)):- A = mobilizeS(Car, loc(X, Y), T), carLocation(Car, loc(X1,Y1), T, S), distance(loc(X1, Y1), loc(X, Y), D1), D is D1 + 1, ( (homeRegion(Car, Reg), in(loc(X, Y), Reg)) -> avgTimePerBlockEmergHome(V); avgTimePerBlockEmergForeign(V) ), consecTripCount(Car, Count, S), tirednessLagTime(LagTime), rOntime(Ro), W is 660 - (Count * LagTime), Z1 is (0 - D * V) / D, gsl_std_normal_cdf(Z1, Prob1), Z2 is (W - D * V) / D, gsl_std_normal_cdf(Z2, Prob2), ProbOntime is Prob2 - Prob1, R is ProbOntime * Ro.