how to set / add another rules in random selection code
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuestas (0)
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!