% This function integrates the model for diners (D), cooks (C), and waiters (W) function [T,Y] = integrate_tip_model_alternatives(t0,tend,m1,m2,T1,T2,R,bw1,bw2,bc1,bc2,Nd,Nw,Nc,IC) % integrate system options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-4]); [T,Y] = ode45(@(t,y)oderhs(t,y,m1,m2,T1,T2,R,bw1,bw2,bc1,bc2,Nd,Nw,Nc),[t0 tend],IC,options); end % Right hand side of tipping model function dy = oderhs(~,y,m1,m2,T1,T2,R,bw1,bw2,bc1,bc2,Nd,Nw,Nc) % y(1) is diners, y(2) is waiters, y(3) is cooks dy = zeros(3,1); % gratuity g1 = m1*y(1)*T1/y(2); g2 = m2*(Nd-y(1))*T2/(Nw-y(2)); % value perceived by diners: VERSION 2 (quality is pay times W and C) v1 = ((bw1+g1)*y(2)+R*bc1*y(3))/(m1*(1+T1)); v2 = ((bw2+g2)*(Nw-y(2))+R*bc2*(Nc-y(3)))/(m2*(1+T2)); % value perceived by diners: VERSION 3 (quality is pay) %v1 = (bw1+g1+R*bc1)/(m1*(1+T1)); v2 = (bw2+g2+R*bc2)/(m2*(1+T2)); % transition probabilities for diners Pd1 = v1/(v1+v2); Pd2 = v2/(v1+v2); % change in diners at our restaurant dy(1) = (Nd-y(1))*Pd1 - y(1)*Pd2; % transition probabilities for waiters Pw1 = (bw1+g1)/(bw1+g1+bw2+g2); Pw2 = (bw2+g2)/(bw1+g1+bw2+g2); % change in waiters at our restaurant dy(2) = (Nw-y(2))*Pw1 - y(2)*Pw2; % transition probabilities for cooks Pc1 = bc1/(bc1+bc2); Pc2 = bc2/(bc1+bc2); % chance in cooks at our restaurant dy(3) = (Nc-y(3))*Pc1 - y(3)*Pc2; end