www.gusucode.com > 交通系统MCM-2009A题答案matlab源码程序 > setRules.m

    function [] = setRules( rules )
% rules is a set of parameters (priority signs, road marks, traffic lights)
% Every rule set is represented by the unique combination of:
% * index - divided by powers of 2, boolean values are obtained
% * queues - divided by powers of maxQueueSize, natural numbers are obtained
% * greenTimes - divided by powers of maxGreenTime, natural numbers are obtained
% * offTimes - divided by powers of maxOffTime, natural numbers are obtained

global numOfINS;
global maxQueueSize;
global maxGreenTime;
global maxOffTime;
global TL;

% ASSIGNMENTS
p = rules.priority;                                     % priority
if (TL)
    t = rules.present;                                  % presence of traffic lights
    q = rules.queue;                                    % queue sizes
    g = rules.greenTime;                                % green times
    o = rules.offTime;                                  % off times
end

% STRUCTURE OF TRAFFIC LIGHTS
global trafficLight;
if (p == 0)
    trafficLight.isPresent  = zeros(1,numOfINS);        % presence
    trafficLight.queueSize  = zeros(1,numOfINS);        % min queue size for green
    trafficLight.greenTime  = zeros(1,numOfINS);        % total time for green
    trafficLight.greenCount = zeros(1,numOfINS);        % time left for green
    trafficLight.offTime    = zeros(1,numOfINS);        % min time for forced off
    trafficLight.offCount   = zeros(1,numOfINS);        % time left for forced off
end

% TRAFIC LIGHTS
if (TL)
    for i=1:numOfINS
        trafficLight.isPresent(i)  = mod(t, 2^i);
        trafficLight.queueSize(i)  = mod(q, maxQueueSize^i);
        trafficLight.greenTime(i)  = mod(g, maxGreenTime^i);
        trafficLight.greenCount(i) = 0;                 % initial states = off
        trafficLight.offTime(i)    = mod(o, maxOffTime^i);
        trafficLight.offCount(i)   = 0;                 % no previous green signal
    end
end

% PRIORITIES
global hasPriority; hasPriority = zeros(1,numOfINS);
for i=1:numOfINS
    hasPriority(i) = mod(p,2^i);                        % priorities for each IN
end

end