private Sitzplan sitzplanGenerieren(int anzahlTische, int schuelerMaxProTisch, int index, bool beachteFirma, bool beachteBeruf) { int strafPunkteMin; int strafPunkte = 0; List <Schueler> liste = new List <Schueler>(); Sitzplan preSitzplan = new Sitzplan(anzahlTische, schuelerMaxProTisch); Sitzplan sitzplan = new Sitzplan(anzahlTische, schuelerMaxProTisch); liste.AddRange(this.schuelerListe); sitzplan.verteileSchueler(liste); strafPunkteMin = sitzplan.berechneStrafpunkte(this.schuelerListe, beachteFirma, beachteBeruf); //Den Besten Sitzplan aus 500 bestimmen for (int j = 0; j < 500; j++) { liste = new List <Schueler>(); liste.AddRange(this.schuelerListe); preSitzplan.verteileSchueler(liste); strafPunkte = preSitzplan.berechneStrafpunkte(this.schuelerListe, beachteFirma, beachteBeruf); if (index > 0) { strafPunkte += moeglichstWenigSitzpartnerDopplungen(index, preSitzplan); } if (strafPunkteMin > strafPunkte) { strafPunkteMin = strafPunkte; sitzplan = new Sitzplan(preSitzplan); if (strafPunkteMin == 0) { j = 500; } } } return(sitzplan); }
public TischgruppenAendernGUI(int blocknummer) { this.Title = string.Join(" ", "Block", (blocknummer + 1).ToString(), "ändern"); InitializeComponent(); startseite.IsEnabled = true; schuelerListDerKartei.AddRange(sitzplanKartei.getSchuelerListe()); sitzplanFuerBlock = sitzplanKartei.getSitzplan(blocknummer); setUpData(); setUpDataGrid(); }
// Standard mit 5 Tischgruppen und 6 Schülern maximal pro Tisch public void sitzplaeneGenerieren(bool beachteFirma, bool beachteBeruf) { if (schuelerListe.Count > 0) { //Erstellen der einzelnen Sitzpläne for (int i = 0; i < 6; i++) { sitzplaene[i] = new Sitzplan(sitzplanGenerieren(i, beachteFirma, beachteBeruf)); } Console.WriteLine("sitzplan fertiggestellt"); } }
public Sitzplan(Sitzplan sitzplan) { this.maxProTisch = 6; this.tischgruppen = new List <Tischgruppe>(); for (int i = 0; i < sitzplan.getTischgruppen().Count; i++) { int j = 0; this.tischgruppen.Add(new Tischgruppe()); foreach (Schueler schueler in sitzplan.getTischgruppe(i).getSitzplaetze()) { this.tischgruppen[i].setzeSchueler(schueler, j); j++; } } }
//Sitzplan verteilen mit variablen Gruppengrößen/Anzahl Tischgruppen public void sitzplaeneGenerieren(int anzahlTische, int schuelerMaxProTisch, bool beachteFirma, bool beachteBeruf) { if (schuelerListe.Count > 0) { if (anzahlTische * schuelerMaxProTisch < schuelerListe.Count) { throw new ArgumentOutOfRangeException("Schüleranzahl", "Die aktuelle Schueleranzahl ist größer als die Anzahl der Sitzplätze."); } //Erstellen der 6 einzelnen Sitzpläne for (int i = 0; i < 6; i++) { sitzplaene[i] = new Sitzplan(sitzplanGenerieren(anzahlTische, schuelerMaxProTisch, i, beachteFirma, beachteBeruf)); } Console.WriteLine("sitzplan fertiggestellt"); } }
private SortedList <String, int> sitzNachbarnbestimmen(Sitzplan sitzplan, Schueler schuelerAusListe, SortedList <String, int> sitznachbarn) { foreach (Tischgruppe tischgruppe in sitzplan.getTischgruppen()) { int sitzposition = tischgruppe.getSitzplaetze().IndexOf(schuelerAusListe); if (sitzposition >= 0) { //0 sitzt neben 1 if (sitzposition == 0) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[1]); } //1 sitzt neben 0 und 2 if (sitzposition == 1) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[2]); sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[0]); } //2 sitzt neben 1 und 3 if (sitzposition == 2) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[1]); sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[3]); } //3 sitzt neben 4 und 2 if (sitzposition == 3) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[4]); sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[2]); } //4 sitzt neben 5 und 3 if (sitzposition == 4) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[5]); sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[3]); } //5 sitzt neben 4 if (sitzposition == 5) { sitznachbarn = bestimmeSitznachbar(sitznachbarn, tischgruppe.getSitzplaetze()[4]); } } } return(sitznachbarn); }
private void BlockButton_Checked(object sender, RoutedEventArgs e) { string buttonName; RadioButton radio = sender as RadioButton; if (radio != null) { buttonName = radio.Name.ToString(); } else { return; } blockNummer = Int32.Parse(Regex.Replace(buttonName, "[^0-9 _]", "")) - 1; aktiverBlock = sitzplaene[blockNummer]; var tischGruppen = aktiverBlock.getTischgruppen(); App.Current.Properties["Block"] = aktiverBlock; assignSitzplanView(tischGruppen.Count); }
//Sitzplan mit den vorherigen Plänen vergleichen private int moeglichstWenigSitzpartnerDopplungen(int index, Sitzplan sitzplan) { Sitzplan pruefen = new Sitzplan(sitzplan); int strafPunkte = 0; foreach (Schueler schuelerAusListe in this.schuelerListe) { SortedList <String, int> sitznachbarn = new SortedList <string, int>(); //Vergleichen mit früheren Sitzplänen for (int i = index - 1; i >= 0; i--) { sitznachbarn = sitzNachbarnbestimmen(this.sitzplaene[i], schuelerAusListe, sitznachbarn); } sitznachbarn = sitzNachbarnbestimmen(sitzplan, schuelerAusListe, sitznachbarn); for (int k = 0; k < sitznachbarn.Count; k++) { if (sitznachbarn.Values[k] > 1) { strafPunkte += sitznachbarn.Values[k] * 1000; } } } return(strafPunkte); }
public void setSitzplaene(Sitzplan sitzplan, int index) { this.sitzplaene[index] = sitzplan; }