Voor mijn schaakvereniging ben ik bezig met een indelingsprogramma te schrijven (ik weet het er bestaan er al een aantal, maar die voldoen niet). Bedoeling is om een Round Robin competitie te laten spelen waarbij de partijen vooraf worden gegenereerd en de daadwerkelijke indeling vervolgens gebeurt op basis van de aanwezige spelers en de urgentie van de partij.
De scores voor de partijen e.d. worden inmiddels aangemaakt. Daarnaast heb ik een brute-force gedeelte geschreven die alle mogelijke combinaties langsgaat om te kijken welke combinatie van partijen de hoogste score oplevert (dit moet immers de te spelen partijen worden). Het teruggeven van deze combinatie wil echter maar niet lukken. Het volgende heb ik inmiddels:
Ik heb de volgende variabelen buiten de methodes (dus public) geplaatst:
string[] optimum_matches;
double optimum_score = 0;
Wanneer ik op regel 408 een break plaats zie ik elke keer de de optimum score worden verhoogd, kloppend met de wedstrijden die erin worden geplaatst. De laatste keer dat ik daar kom is dan ook de hoogste score. Wanneer ik echter op regel 338 ook een break plaats lijkt optimum_matches de waarde van de laatste wedstrijden over te nemen. Op welke wijze zou ik de variable moeten doorgeven?
De scores voor de partijen e.d. worden inmiddels aangemaakt. Daarnaast heb ik een brute-force gedeelte geschreven die alle mogelijke combinaties langsgaat om te kijken welke combinatie van partijen de hoogste score oplevert (dit moet immers de te spelen partijen worden). Het teruggeven van deze combinatie wil echter maar niet lukken. Het volgende heb ik inmiddels:
Ik heb de volgende variabelen buiten de methodes (dus public) geplaatst:
string[] optimum_matches;
double optimum_score = 0;
C#: Genereer partijen
334
335
336
337
338
339
340
341
342
343
344
345
346
347
| //ALGORITME UITVOEREN algoritme(temp, wedstrijden, match, 1); //PARTIJEN TOEVOEGEN AAN SCHEMA int d = 0; foreach (String wedstrijd in optimum_matches) { if (wedstrijd != null && d != 0) { Console.WriteLine(wedstrijd); add_match(wedstrijd.Split(';')[0], Convert.ToDateTime(comboBox1.Text)); } d++; } |
C#: Algoritme
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
| eerst wordt de nieuwe match aan wedstijden toegevoegd en de nieuwe score berekent //OPTIMUM WIJZIGEN IN WEDSTRIJDEN INDIEN SCORE HOGER IS if (optimum_score < Convert.ToDouble(wedstrijden[0])) { optimum_matches = wedstrijden; optimum_score = Convert.ToDouble(wedstrijden[0]); Console.WriteLine(optimum_score); } //ALLE COMBINATIES NALOPEN for (int a = 0; a < partijen.Count; a++) { for (int b = wedstrijden.Count() - 1; b >= match_nr; b--) wedstrijden[b] = null; DataRow partij = (DataRow)partijen[a]; Boolean in_array = false; //CONTROLEREN OF SPELER AL BESTAAT IN WEDSTRIJDEN foreach (String wedstrijd in wedstrijden) { if (wedstrijd != null) { String[] temp = wedstrijd.Split(';'); if (temp.Count() != 1 && (partij[1].ToString() == temp[1] || partij[1].ToString() == temp[2] || partij[2].ToString() == temp[1] || partij[2].ToString() == temp[2])) in_array = true; } } //BIJ NIET BESTAANDE WEDSTRIJD if (!in_array) { match[0] = partij[0].ToString(); match[1] = partij[1].ToString(); match[2] = partij[2].ToString(); match[3] = partij[5].ToString(); algoritme(partijen, wedstrijden, match, match_nr); Console.WriteLine(a + " - " + match_nr +" - " + wedstrijden[0]); } } |
Wanneer ik op regel 408 een break plaats zie ik elke keer de de optimum score worden verhoogd, kloppend met de wedstrijden die erin worden geplaatst. De laatste keer dat ik daar kom is dan ook de hoogste score. Wanneer ik echter op regel 338 ook een break plaats lijkt optimum_matches de waarde van de laatste wedstrijden over te nemen. Op welke wijze zou ik de variable moeten doorgeven?