%script to simulate the problem of a miner trapped in a mine
%with 3 doors to selected. One door leads to freedom in 3 hrs,
%second door leads back to the mine in 5 hrs, 3rd door leads
%back to the mine in 7 hrs.  Find expected time to leave the mine

%by Nasser Abbasi. For math 502 CSUF probability and statistics 10/18/07

%example output:
%
%number of simulations=20000, Time to escape = 15.054550

%----- configuration section ----------%

close all;
TRUE  = 1;
FALSE = 0;
total_simulation_time = 0;

t1 = 3;   %time to escape for first door
t2 = 5;   %time to escape for second door
t3 = 7;   %time to escape for third door

number_of_simulations     = 40000;
current_simulation_number = 0;
number_of_doors = 3;
randn('state',010101);
figure(1);
set(gcf,'Doublebuffer','on') ;
grid off
axis([1 number_of_simulations 12 16])
hold on;

%------ algorithm start --------------------%

while current_simulation_number < number_of_simulations
    this_simulation_time = 0;
    escaped = FALSE;

    while not(escaped)
        door_number = ceil(number_of_doors.*rand(1,1));
        switch door_number
            case 1
                escaped = TRUE;
                this_simulation_time = this_simulation_time + t1;
            case 2
                this_simulation_time = this_simulation_time + t2;
            case 3
                this_simulation_time = this_simulation_time + t3;
        end
    end

    total_simulation_time = total_simulation_time + this_simulation_time;
    current_simulation_number = current_simulation_number + 1;

    if mod(current_simulation_number,50)==0
        
        current_average_time_to_escape = ...
            total_simulation_time/current_simulation_number;
        
        title(sprintf('Number of simulations=%d\nExpected time to escape=%f hrs',...
            current_simulation_number,current_average_time_to_escape));
        
        xlabel('simulation number'); ylabel('expected time (hr)');
        plot(current_simulation_number,current_average_time_to_escape,'.','MarkerSize',5);

        drawnow;
    end
end

fprintf('\nNumber of simulations=%d\nTime to escape = %f\n',...
    number_of_simulations,...
    total_simulation_time/number_of_simulations  );

