Hallo Leute,
Ich bin daran ein System für Schulen zu entwickeln, mit dessen Hilfe Schüler für Online eingestellte Projekte ihre 1., 2. und 3. Wahl abgeben können. Ein Algorithmus, der mit 50 Zufallsdurchgängen berechnet, in welches Projekt jeder bekommt, sucht sich dann aus diesen 50 zuordnungen die beste aus. Das ist mein Vorschlag, der aber nicht geht, da die Seite einfach immer nur am Laden ist und nicht passiert kann ich auch keine Fehlermeldung lesen, da es keine gibt.
P.S.: Jeder Schueler der seine erstwahl bekommt, bekommt 3 Punkte, seine 2. Wahl 2 Punkte und drittwahl 1 Punkt
Über eure Hilfe wäre ich sehr dankbar
Grüße
Niklas
Ich bin daran ein System für Schulen zu entwickeln, mit dessen Hilfe Schüler für Online eingestellte Projekte ihre 1., 2. und 3. Wahl abgeben können. Ein Algorithmus, der mit 50 Zufallsdurchgängen berechnet, in welches Projekt jeder bekommt, sucht sich dann aus diesen 50 zuordnungen die beste aus. Das ist mein Vorschlag, der aber nicht geht, da die Seite einfach immer nur am Laden ist und nicht passiert kann ich auch keine Fehlermeldung lesen, da es keine gibt.
PHP:
<?php
tabellen_kopieren_algorithmus();
for($i_haupt = 0; $i_haupt < 5; $i_haupt++){
$zaehlvar_1 = 0; // Variable 1 für Punktzahl für beste Zuteilung
$zaehlvar_2 = 0; // Variable 2 für Punktzahl für beste Zuteilung
$nutz_tabelle = 1; // Tabelle die genutzt wird
$punkte_zaehl_variable;
$faktor = 3;
for($i_i = 1; $i_i < 4; $i_i++){
$i_ii = 1;
$sql_projekte = "SELECT * FROM algorithmus_projekte_".$nutz_tabelle."";
$query_projekte = mysql_query($sql_projekte) or die(mysql_error());
$anzahl_projekte = mysql_num_rows($query_projekte);
// Alle Projekte werden geladen
while($erg_projekte = mysql_fetch_assoc($query_projekte)){
$sql_benutzer_wahl1 = "SELECT * FROM algorithmus_benutzer_".$nutz_tabelle." WHERE wahl_".$i_ii." = ".$erg_projekte['id']." AND projekt_final = 0";
$query_benutzer_wahl1 = mysql_query($sql_benutzer_wahl1) or die(mysql_error());
//Benutzer die noch kein Projekt haben werden geladen
$anzahl_benutzer = mysql_num_rows($query_benutzer_wahl1);
if($anzahl_benutzer == $erg_projekte['freie_plaetze']){
$sql_benutzer_wahl1_zuteilung = "UPDATE algorithmus_benutzer_".$nutz_tabelle." SET projekt_final = ".$erg_projekte['id']." WHERE wahl_".$i_ii." = ".$erg_projekte['id']."";
mysql_query($sql_benutzer_wahl1_zuteilung) or die(mysql_error());
//Wenn die Anzahl der Benutzer die ein Projekt gewählt haben gleich der Anzahl
// Der anzahl der freien plätze ist, werden allen schülern das projekt zugewiesen
$sql_projekte_freieplaetze_update = "UPDATE algorithmus_projekte_".$nutz_tabelle." SET freie_plaetze = 0 WHERE id = ".$erg_projekte['id']."";
mysql_query($sql_projekte_freieplaetze_update) or die(mysql_error());
$zaehlvar_1 += ($anzahl_benutzer*$faktor);
}else if($anzahl_benutzer > $erg_projekte['freie_plaetze']){
$x = 0;
while($erg_benutzer = mysql_fetch_assoc($query_benutzer_wahl1)){
$benutzer_zufall[$x][0] = $erg_benutzer['benutzername'];
$x ++;
}
for($i_1 = 1; $i_1 <= $erg_projekte['freie_plaetze']; $i_1++){
$bool_benutzername_belegt = true;
$i_2;
while($bool_benutzername_belegt == true){
$i_2 = mt_rand(0, $anzahl_benutzer);
if(isset($benutzer_zufall[$i_2][1])){
$bool_benutzername_belegt == true;
}else{
$bool_benutzername_belegt == false;
}
} // Wenn mehr Benutzer ein Projekt haben wollen werden die in ein
// nummerisches Array gepackt und dann zufällig so viele benutzer ausgewählt, wie wir freie
// plätze haben
$sql_benutzer_zufall_zuweisung = "UPDATE algorithmus_benutzer_".$nutz_tabelle." SET projekt_final = ".$erg_projekte['id']." WHERE benutzername = '".$benutzer_zufall[$i_2][0]."'";
mysql_query($sql_benutzer_zufall_zuweisung) or die(mysql_error());
$sql_projekte_freie_plaetze_update = "SELECT * FROM algorithmus_projekte_".$nutz_tabelle." WHERE id = ".$erg_projekte['id']."";
$query_projekte_freie_plaetze_update = mysql_query($sql_projekte_freie_plaetze_update) or die(mysql_error());
$erg_projekte_freie_plaetze_update = mysql_fetch_assoc();
$sql_freie_plaetze_set = "UPDATE algorithmus_projekte_".$nutz_tabelle." SET freie_plaetze = ".($erg_projekte_freie_plaetze_update['freie_plaetze'] - 1)." WHERE id = ".$erg_projekte['id']."";
mysql_query($sql_freie_plaetze_set) or die(mysql_error());
$zaehlvar_1 += $faktor;
}
$sql_projekte_freieplaetze_update = "UPDATE algorithmus_projekte_".$nutz_tabelle." SET freie_plaetze = 0 WHERE id = ".$erg_projekte['id']."";
mysql_query($sql_projekte_freieplaetze_update) or die(mysql_error());
}else if($anzahl_benutzer < $erg_projekte['freie_plaetze']){
$sql_benutzer_wahl1_zuteilung = "UPDATE algorithmus_benutzer_".$nutz_tabelle." SET projekt_final = ".$erg_projekte['id']." WHERE wahl_".$i_ii." = ".$erg_projekte['id']."";
mysql_query($sql_benutzer_wahl1_zuteilung) or die(mysql_error());
$sql_freieplaetze_update = "UPDATE algorithmus_projekte_".$nutz_tabelle." SET freie_plaetze = ".(($erg_projekte['freie_plaetze']) - ($anzahl_benutzer))."";
mysql_query($sql_benutzer_wahl1_zuteilung) or die(mysql_error());
$zaehlvar_1 +=($anzahl_benutzer*$faktor);
}
}
$i_ii ++;
$faktor --;
}
echo $zaehlvar_1;
echo "<br>";
if($zaehlvar_1 > $zaehlvar_2){ // Wenn die Punktzahl höher ist als die vorherige wird die jetzige konstellation gesichert
$zaehlvar_2 = $zaehlvar_1;
if($nutz_tabelle == 1){
$nutz_tabelle = 2;
$sql = "DROP TABLE algorithmus_benutzer_".$nutz_tabelle."";
mysql_query($sql) or die(mysql_error());
}else if($nutz_tabelle == 2){
$nutz_tabelle = 1;
$sql = "DROP TABLE algorithmus_benutzer_".$nutz_tabelle."";
mysql_query($sql) or die(mysql_error());
}
}else{
$sql = "DROP TABLE algorithmus_benutzer_".$nutz_tabelle."";
mysql_query($sql) or die(mysql_error());
}
tabellen_kopieren_algorithmus();
}
PHP:
function tabellen_kopieren_algorithmus(){
$sql_tabelle_kopieren_benutzer = "CREATE TABLE IF NOT EXISTS algorithmus_benutzer_1 AS SELECT * FROM benutzer";
mysql_query($sql_tabelle_kopieren_benutzer) or die(mysql_error());
$sql_tabelle_kopieren_projekte = "CREATE TABLE IF NOT EXISTS algorithmus_projekte_1 AS SELECT * FROM projekte";
mysql_query($sql_tabelle_kopieren_projekte) or die(mysql_error());
$sql_tabelle_kopieren_benutzer = "CREATE TABLE IF NOT EXISTS algorithmus_benutzer_2 AS SELECT * FROM benutzer";
mysql_query($sql_tabelle_kopieren_benutzer) or die(mysql_error());
$sql_tabelle_kopieren_projekte = "CREATE TABLE IF NOT EXISTS algorithmus_projekte_2 AS SELECT * FROM projekte";
mysql_query($sql_tabelle_kopieren_projekte) or die(mysql_error());
}
P.S.: Jeder Schueler der seine erstwahl bekommt, bekommt 3 Punkte, seine 2. Wahl 2 Punkte und drittwahl 1 Punkt
Über eure Hilfe wäre ich sehr dankbar
Grüße
Niklas
Zuletzt bearbeitet: