""" Enthaelt alle Datenstrukturen um die Sitzplatzverteilung als GA zu variieren """ __author__ = "Michael Stangl" __version__ = "$Revision: $" __date__ = "$Date: $" __copyright__ = "Copyright (c) 2005 Michael Stangl" __license__ = "Python" from ga import * from Strukturdaten import * import configparser import optparse if __name__ == '__main__': # Kommandozeilenoption --indir: Verzeichnis mit den Eingabedateien # (tische.ini, bestellung.json) und Ziel fuer die Ausgabedateien # (TischePersonen.txt, PersonenTische.csv) parser = optparse.OptionParser() parser.add_option( "--indir", dest="indir", default=None, help="Verzeichnis mit tische.ini und bestellung.json; " "dort werden auch TischePersonen.txt und PersonenTische.csv abgelegt" ) parser.add_option( "--tosvg", dest="tosvg", action="store_true", default=False, help="zusaetzlich eine Sitzplatzverteilung.svg im --indir Verzeichnis " "erzeugen (Tische als weisse Kreise, Personen als farbige " "Kreise je Gruppe)" ) parser.add_option( "--show-connections", dest="showconn", action="store_true", default=True, help="in der Sitzplatzverteilung.svg jede ueber mehrere Tische " "getrennte Gruppe mit einer Linie in ihrer Gruppenfarbe " "verbinden (Vorgabe: an; nur mit --tosvg wirksam)" ) parser.add_option( "--hide-connections", dest="showconn", action="store_false", help="die Verbindungslinien getrennter Gruppen in der " "Sitzplatzverteilung.svg nicht zeichnen" ) parser.add_option( "--show-development", dest="showdev", action="store_true", default=False, help="zusaetzlich eine Entwicklung.svg im --indir Verzeichnis " "erzeugen: Verlauf der Loesungsfindung (Zeitachse nach rechts, " "beste/durchschnittliche/schlechteste Wertigkeit auf der Y-Achse)" ) (options, args) = parser.parse_args() if options.indir is None: parser.error( "--indir ist erforderlich" ) InDir = os.path.expandvars( os.path.expanduser( options.indir ) ) if not os.path.isdir( InDir ): parser.error( "--indir '%s' ist kein Verzeichnis" % InDir ) # lade Vorgaben fuer Optimierungszyklus und config = configparser.ConfigParser() ConfigPath= os.path.join( os.getenv('PLATZ_CFG'), 'platz.cfg') config.read( os.path.expandvars( ConfigPath )) Zyklusconfig = os.path.normpath( config.get( 'Config', 'Zyklusdatei' )) Zyklusconfig = os.path.expandvars( Zyklusconfig ) Zyklusart = config.get( 'Config', 'Zyklusart' ) Strafenconfig = os.path.normpath(config.get( 'Config', 'Strafendatei' )) Strafenconfig = os.path.expandvars( Strafenconfig ) ## print Strafenconfig # lade Eingabedateien Tischconfig = os.path.join( InDir, 'tische.ini' ) Bestellung = os.path.join( InDir, 'bestellung.json' ) # lade Ausgabedateien AusgabeTP= os.path.join( InDir, 'TischePersonen.txt' ) AusgabePT = os.path.join( InDir, 'PersonenTische.csv' ) AusgabeSVG = os.path.join( InDir, 'Sitzplatzverteilung.svg' ) AusgabeEntwicklung = os.path.join( InDir, 'Entwicklung.svg' ) Z = Zyklus() Z.laden( Zyklusconfig, Zyklusart ) print(Z) SL = Strafliste() SL.laden( Strafenconfig ) print(SL) TE = Tische() TE.laden( Tischconfig ) print(TE) InputFile = JSONConfig() [ PN, GN, VIPGruppe, VIPListePT, GruppenNamen ] = InputFile.laden( Bestellung ) print(PN) print(GN) print(VIPGruppe) print(VIPListePT) print("\n-- Erzeuge Farm:") F1 = Farm( Z, Sitzplatzverteilung, Tische=TE, Gruppen=GN, Strafen=SL, VIPListe=VIPListePT, VIPs=VIPGruppe ) #print(F1) S = F1.Bester() print(S) S.speichern( AusgabeTP, AusgabePT ) if options.tosvg: S.alsSVG( AusgabeSVG, Verbindungen=options.showconn ) if options.showdev: F1.Entwicklung.alsSVG( AusgabeEntwicklung ) print( "Entwicklungsverlauf geschrieben:", AusgabeEntwicklung ) else: pass