how to set / add another rules in random selection code

3 vues (au cours des 30 derniers jours)
syamil syam
syamil syam le 20 Juin 2012
this is my code for random selection of nurse scheduling...
i have 7 columns (work of day) and M rows ..
how can I make the 44(off) is just one 44 in a week and before 44 must 33(night)?
row = get(handles.tblLoad,'Data');
[rs cs] = size(row);
dataName=row(1:rs);
set(handles.tblGenerate,'RowName',dataName);
m=str2double(get(handles.txtjumlah,'String'));
%call function from file randomwords.m to generate row by row randomly
% B = cell(m,7);
% B{m,7} = [];
% for i = 1:1
% for q = 1:m
% for j = 1:7
% B{q,j}=randomwords(10,1) %random mx7 dlm cell
% end
% end
% end
% x=cell2mat(B); % convert jadi matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This function will randomly set a rules for soft constraint and save it in N
% case 1
% +----------------------+
% | Shift | Percent |
% |11(Morning)| 0.5 |
% |22(Evening)| 0.3 |
% |33(Night) | 0.175 |
% |44(off) | 0.025 |
% +----------------------+
% case 2
% +----------------------+
% | Shift | Percent |
% |11(Morning)| 0.45 |
% |22(Evening)| 0.33 |
% |33(Night) | 0.195 |
% |44(off) | 0.025 |
% +----------------------+
% case 3
% +----------------------+
% | Shift | Percent |
% |11(Morning)| 0.40 |
% |22(Evening)| 0.36 |
% |33(Night) | 0.215 |
% |44(off) | 0.025 |
% +----------------------+
AA = [m 7];
for i=1:7
%bil=round(rand(1,1)*2) %random number from 0-2
bil44=1;
switch bil
case 0
bil11=round(m*0.5)
bil22=round(m*0.3)
bil33=round(m*0.175)
bil44= round(m*0.025)
case 1
bil11=round(m*0.45)
bil22=round(m*0.33)
bil33=round(m*0.195)
bil44= round(m*0.025)
case 2
bil11=round(m*0.40)
bil22=floor(m*0.36)
bil33=round(m*0.215)
bil44= round(m*0.025)
end
if bil44==0
bil44=1;
end
N(:,i)=[bil11;bil22;bil33;bil44] % set of rules of soft constraint
end
% Data of shift is assign in mx7 cell and store in x
t=sum(N)~=AA(1);
if isnan(m)
msgbox('Total of nurse is not a valid number','Warning','error')
else
if any(t), I1 = randi(size(N,1)-1);
N(I1,:) = N(I1,:)-t;
end
x = zeros(AA);
xx = 11*(1:4)';
for j = 1:size(N,2)
x(randperm(AA(1)),j) = ...
cell2mat(arrayfun(@(i)xx(i)*ones(N(i,j),1),1:length(xx),'un',0).');
end
end

Réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by