c# - Algorithm uniform distribution of elements in the matrix -



c# - Algorithm uniform distribution of elements in the matrix -

i need generate tasks in month of date of random uniform distribution. example, 10 people 10 tasks dates spaced not less 2 days. weekends , holidays not used. uniform random distribution of elements in multiplicity additional status multiplicity - people x dates of month. suggest, can watch algorithm.

in general decided somehow. however, must say, decision not like, nil improve not think. parameters follows: taskspermonth - number of jobs per month, distancebetweentasks - minimum distance between 2 adjacent jobs, istasksinweekend - take business relationship whether or not weekend, minday - starting day (for various reasons, may not first day of month), listofdays - empty, holidays - list of days off , holidays, workdaysinmonth - list of working days, random - empty random (). rest, think, in principle, clear, function code shown below optimizationthedistributionoftasks

public void generaterandomtasks(int taskspermonth, int distancebetweentasks, bool istasksinweekend, int minday, list<int> listofdays, list<int> holidays, list<int> workdaysinmonth, random random) { if (taskspermonth == 0) taskspermonth = 1; var daysinmonth = workdaysinmonth.count + holidays.count; var tasksdaysinmonth = !istasksinweekend ? workdaysinmonth.count : daysinmonth; (int = 0; < taskspermonth; i++) { int maxdayinperiod; if (i < taskspermonth - 1) { maxdayinperiod = minday + tasksdaysinmonth / taskspermonth; if (!istasksinweekend && holidays.contains(maxdayinperiod)) maxdayinperiod = workdaysinmonth.first(v => v > maxdayinperiod); } else { maxdayinperiod = daysinmonth; if (!istasksinweekend && holidays.contains(maxdayinperiod)) maxdayinperiod = workdaysinmonth.last(); } if (minday > maxdayinperiod) minday = maxdayinperiod; var day = random.next(minday, maxdayinperiod); if ((istasksinweekend != true && holidays.contains(day))) day = optimizationthedistributionoftasks(minday, maxdayinperiod, listofdays, day, holidays); if (day > daysinmonth) day = daysinmonth; listofdays.add(day); minday = maxdayinperiod; if (minday <= day + distancebetweentasks) minday = day + distancebetweentasks + 1; } }

method optimizationthedistributionoftasks:

private int optimizationthedistributionoftasks(int minday, int maxday, list<int> listdays, int day, list<int> holidays) { var listofdays = new list<daysfortaskplan>(); (int k = minday; k <= maxday; k++) { var tempcountdays = listdays.count(d => k == d); if (!holidays.contains(k)) listofdays.add(new daysfortaskplan(k, tempcountdays)); } if (listofdays.any()) { day = listofdays.first(p => p.amountdays == listofdays.min(z => z.amountdays)).currday; } listofdays.clear(); homecoming day; }

good luck all

c# algorithm

Comments

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -