OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden

Skrodde

Aktives Mitglied
Hallo zusammen,
ich arbeite gerade daran, mir ein Framework zu schreiben, welches mathematische Optimierungsprobleme verwaltet. Man soll Porbleme der folgenden vier Arten eingeben können:
  • linear Zielfunktion und Nebenbedingungen
  • stückweise lineare Zielfunktion und Nebenbedingungen
  • polynomielle Zielfunktionen und Nebenbedingungen
  • stückweise polynomielle Zielfunktionen und Nebenbedingungen
Für den ersten Punkt gibt es mit JavaILP bereits ein Framework, welches ich auch gern nutzen möchte. Normalerweise hätte ich mir sonst eine abstrakte Klasse "Problem" definiert, die dann von vier Klassen implementiert wird, welche die oben genannten Probleme umsetzen. Nun kann ich aber an die "Problem" Klasse aus dem JavaILP nicht heran. Gibt es dennoch eine Möglichkeit, die Klasse so einzubauen?
Sehr schön wäre auch, wenn der Benutzer gar nicht spezifizieren muss, mit welcher dieser Klasser er arbeitet und das Programm dies während der Laufzeit selbst bestimmt. Welche Möglichkeiten gibt es hierzu? Wenn jetzt beispielsweise ein Nutzer zwei lineare Gleichungen angbit, soll das als lineares Problem angelegt werden. Ist die Zielfunktion jedoch polynomiell, soll ein polynomielles Problem daraus werden.
Vielen Dank für jeden Denkanstoß, Skrodde
 

Skrodde

Aktives Mitglied
Hi Threadpool,
unter einer linearen Zielfunktion verstehe ich eine Funktion
Code:
f(x_1,...,x_n) = c_1x_1 + c_2x_2 + ... + c_nx_n
wobei die x_i meine Variablen sind und die c_i Konstanten. Analog dazu ist eine polynomielle Zielfunktion für mich
Code:
f(x_1,...,x_n) = c_(10)x_1^0 + c_(11)x_1^1 + ... + c_(1m)x_1^m + ... + c_(nm)x_n^m
das heißt, die Variablen dürfen nun noch in beliebigen (natürlichen) Potenzen auftauchen.
Gruß, Skrodde
 
B

bygones

Gast
Für den ersten Punkt gibt es mit JavaILP bereits ein Framework, welches ich auch gern nutzen möchte. Normalerweise hätte ich mir sonst eine abstrakte Klasse "Problem" definiert, die dann von vier Klassen implementiert wird, welche die oben genannten Probleme umsetzen. Nun kann ich aber an die "Problem" Klasse aus dem JavaILP nicht heran. Gibt es dennoch eine Möglichkeit, die Klasse so einzubauen?
Du definierst dir eine Abstraktion fuer dein "Problem". Jede deiner Punkte muss schlussendlich in einer Implementierung enden. Fuer die, die JavaILP schon etwas bietet, erstellst du eine Implementierung die eben JavaILP nutzt.
JavaILP muss nix ueber deine Struktur kennen, du musst deine Struktur an deren Implementierung adaptieren.

Sehr schön wäre auch, wenn der Benutzer gar nicht spezifizieren muss, mit welcher dieser Klasser er arbeitet und das Programm dies während der Laufzeit selbst bestimmt. Welche Möglichkeiten gibt es hierzu? Wenn jetzt beispielsweise ein Nutzer zwei lineare Gleichungen angbit, soll das als lineares Problem angelegt werden. Ist die Zielfunktion jedoch polynomiell, soll ein polynomielles Problem daraus werden.
du musst wissen wann etwas vorliegt, dann kannst du auch die entsprechende Funktionalitaet waehlen... und dann ists ein einfaches if
 

Skrodde

Aktives Mitglied
Hallo bygones,

Du definierst dir eine Abstraktion fuer dein "Problem". Jede deiner Punkte muss schlussendlich in einer Implementierung enden. Fuer die, die JavaILP schon etwas bietet, erstellst du eine Implementierung die eben JavaILP nutzt.
JavaILP muss nix ueber deine Struktur kennen, du musst deine Struktur an deren Implementierung adaptieren.
Das klingt wirklich nach einem guten Ansatz. Ich werde nun also eine abstrakte Klasse "Problem" definieren, davon vier Spezialisierungen machen: "linear", "piecewise linear", "polynomial", "piecewise polynomial". Die erste Klasse "linear" ist dann quasi ein Adapter auf die entsprechenden Funktionalitäten von JavaILP.

du musst wissen wann etwas vorliegt, dann kannst du auch die entsprechende Funktionalitaet waehlen... und dann ists ein einfaches if
Ich habe mich hier wohl nicht klar genug ausgedrückt: Ich weiß leider nicht sofort, was vorliegt. Der Nutzer tippt halt Nebenbedingungen ein und mein Programm muss diese verarbeiten. So kann es halt sein, dass die erste eingehende Nebenbedingung eine lineare ist, was für alle vier Problemarten gültig wäre. Als zweites gibt der Nutzer eine stückweise lineare Nebenbedingung ein, was den Fall "linear" rausschmeißt und nur "piecewise linear" und "piecewise polynomial" übrig lässt. Nun speichert der Nutzer seine Eingabe und mein Programm soll eine Klasse der Form "piecewise linear" mit den Eingaben speichern.

Momentan fällt mir dazu nur ein, die Daten zwischenzuspeichern und nach der Benutzereingabe die passende Klasse zu instanziieren. Aber geht das nicht schöner?

Danke soweit, Skrodde
 
B

bygones

Gast
Das klingt wirklich nach einem guten Ansatz. Ich werde nun also eine abstrakte Klasse "Problem" definieren, davon vier Spezialisierungen machen: "linear", "piecewise linear", "polynomial", "piecewise polynomial". Die erste Klasse "linear" ist dann quasi ein Adapter auf die entsprechenden Funktionalitäten von JavaILP.
genau

Ich habe mich hier wohl nicht klar genug ausgedrückt: Ich weiß leider nicht sofort, was vorliegt. Der Nutzer tippt halt Nebenbedingungen ein und mein Programm muss diese verarbeiten. So kann es halt sein, dass die erste eingehende Nebenbedingung eine lineare ist, was für alle vier Problemarten gültig wäre. Als zweites gibt der Nutzer eine stückweise lineare Nebenbedingung ein, was den Fall "linear" rausschmeißt und nur "piecewise linear" und "piecewise polynomial" übrig lässt. Nun speichert der Nutzer seine Eingabe und mein Programm soll eine Klasse der Form "piecewise linear" mit den Eingaben speichern.

Momentan fällt mir dazu nur ein, die Daten zwischenzuspeichern und nach der Benutzereingabe die passende Klasse zu instanziieren. Aber geht das nicht schöner?

Danke soweit, Skrodde
nunja - irgendwo muss das Wissen herkommen, was nun welche Funktion triggered.
Wenn versch. Nebenbedingungen in der Gesamheit dann bestimmen welche "Form" gewaehlt wird, dann brauchst du natuerlich alle. Ich geh mal davon aus dass die Nebenbedingungen so und in den Berechnungen gebraucht werden oder nicht ? - also brauchst du sie ja auf alle Faelle.

Die Frage ist - Wie haettest du es denn gerne stattdessen ?
 

ThreadPool

Bekanntes Mitglied
Ich glaube kaum das dir JavaILP bei nichtlinearer Optimierung hilft, in die deine Beschreibung von "polynomiell" fällt. Schau dir lieber CPLEX als Solver und dessen Java-API an.

Zum eigentlichen Thema, ich frage mich ob so eine Klassifikation überhaupt sinnvoll ist. Denn wenn jmd damit arbeitet und sein Optimierungsmodell eintippt wird er wissen in welche Klasse das fällt und hat auch eine grobe Vorstellung wie die Lösung ablaufen wird. Wenn du dennoch bei der Auswertungsgeschichte bleiben, dann klassifiziere das Modell als Ganzes d.h. nach der Eingabe aller Zielfunktionen und Nebenbedingungen.
 

Skrodde

Aktives Mitglied
@bygones: Werde ich jetzt so machen. Ich hatte gedacht, es gäbt eventuell eine Möglichkeit , alles erst in ein noch nicht sehr spezielles Objekt zu schreiben und dieses Objekt dann (sobald alles bekannt ist) entsprechend zu spezialisiere. Ich habe mich für die von Threadpool angedeutete Lösung entschieden (s.u.), alle Werte zu speichern und dann am Ende die Gesamtmenge zu "bewerten".

Schau dir lieber CPLEX als Solver und dessen Java-API an.
Dazu zwei Fragen: Ist der CPLEX Solver von IBM nicht kostenpflichitg? Und laut Wikipedia kann der auch nur "quadratic programming problems" lösen, keine Probleme, die mit allgemeinen Polynomen arbeiten?!

... wenn jmd damit arbeitet und sein Optimierungsmodell eintippt wird er wissen in welche Klasse das fällt und hat auch eine grobe Vorstellung wie die Lösung ablaufen wird.
Eigentlich soll genau das den Nutzer abgenommen werden. Die Software soll nach Eingabe von ein paar Daten selbst entscheiden, mit welchem verfahren wie optimiert wird. Aber die Überlegungen stecken auch noch in den Kinderschuhen.

Wenn du dennoch bei der Auswertungsgeschichte bleiben, dann klassifiziere das Modell als Ganzes d.h. nach der Eingabe aller Zielfunktionen und Nebenbedingungen.
Genau das werde ich jetzt machen, vielen Dank!
 

ThreadPool

Bekanntes Mitglied
Dazu zwei Fragen: Ist der CPLEX Solver von IBM nicht kostenpflichitg? Und laut Wikipedia kann der auch nur "quadratic programming problems" lösen, keine Probleme, die mit allgemeinen Polynomen arbeiten?!

Ne ne, schon zu meinen Studienzeiten konnte der CPLEX gut was wegschaffen. Eine Kurzübersicht auch im Vergleich zu anderen Solvern findest du hier:

AIMMS - LP and MIP Solver Features

Aber du hast Recht, CPLEX scheint etwas zu kosten, damals hatte uns die Uni das zur Verfügung gestellt und ich hatte wohl nicht weiter drüber nachgedacht. Gute OpenSource Solver kenne ich ehrlich gesagt nicht und bin mir nicht sicher ob es überhaupt einen gibt der wie z.B. CPLEX fast alles unter einem Dach vereint.
 

Skrodde

Aktives Mitglied
Eine Kurzübersicht auch im Vergleich zu anderen Solvern findest du hier:

AIMMS - LP and MIP Solver Features

Aber du hast Recht, CPLEX scheint etwas zu kosten, ...

Die Seite sieht ja so aus, als wäre sie nur dafür da, CPLEX zu promoten :D Aber Geld ausgeben kann ich leider nicht und das CPLEX Optimization Studio kostet 290$, das ist ja schon ein Happen. In jedem Fall trotzdem vielen Dank für die Website. Im Endeffekt soll mein Programm ja selbst optimieren, wir hatten an Evolutionäre Algorithmen gedacht, aber ich schaue mir in jedem Fall auch noch mal die anderen Solver an. Damit bin ich glücklich :)

Danke nochmals an euch beide :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M mit java auf bestehende progs zugreifen Allgemeine Java-Themen 3
D JUNG Framework edge length Allgemeine Java-Themen 0
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
OnDemand PDF Erstellung / Reports Framework Allgemeine Java-Themen 3
OnDemand Pluginsystem Framework Allgemeine Java-Themen 8
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C Gutes Framework für ein Neuronales Netz Allgemeine Java-Themen 15
F Machine-learning Framework Allgemeine Java-Themen 0
D Library/Framework zum Umwandeln von Sound in Notenbilder Allgemeine Java-Themen 1
G Framework von nöten? Allgemeine Java-Themen 1
C BlackBox-Framework - Plugin Programmierung Allgemeine Java-Themen 4
F Framework/Plugin für Tree-Darstellung in Graph Allgemeine Java-Themen 0
F Parser Framework/Plugin für Datei in Custom-Format Allgemeine Java-Themen 2
W Suche Framework zur Prüfung von IPv4 und IPv6 Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
S Android: SQLite Framework einbinden Allgemeine Java-Themen 2
B Experte Play Framework 1.2.5 Allgemeine Java-Themen 5
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
W Framework für RichClient Anwendung? Allgemeine Java-Themen 4
A Framework für einen Web Service Allgemeine Java-Themen 6
D Frage zu Dependency Injection (mit Framework) Allgemeine Java-Themen 3
F Bildbearbeitung Framework Allgemeine Java-Themen 2
J Java Komponenten / Framework Allgemeine Java-Themen 5
L Web-Framework und Swing Framework o.ä Allgemeine Java-Themen 15
B Framework zum durchstöbern des classpath Allgemeine Java-Themen 2
B Was ist ein Framework? Allgemeine Java-Themen 36
E Java Media Framework Allgemeine Java-Themen 5
G Suche "richtiges" Framework/Library Allgemeine Java-Themen 14
M Swing Wünsche Feedback zu GUI-Framework Allgemeine Java-Themen 6
A 2D Framework für Java Allgemeine Java-Themen 2
N Graph mit JUNG-Framework erstellen Allgemeine Java-Themen 2
H Framework empfehlung / gute Anfängerbeispiele gesucht Allgemeine Java-Themen 12
T Lib/Framework zum Automatischen Aufruf von Methoden Allgemeine Java-Themen 2
T jmf Java Media Framework - Liste der unterstützten Medien? Allgemeine Java-Themen 11
X JAVA Framework für suspend and resume Allgemeine Java-Themen 2
D Banking Framework gesucht Allgemeine Java-Themen 5
G Swing Validierungs Framework Allgemeine Java-Themen 2
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
G Was ist ein Framework Allgemeine Java-Themen 4
C java media framework - Mikrofon wird nicht gefunden Allgemeine Java-Themen 18
J mp4 dateien mit dem Java Media Framework abspielen. Allgemeine Java-Themen 2
G Framework für Multi-Prozessor-Programmierung? Allgemeine Java-Themen 4
G Java Media Framework Allgemeine Java-Themen 8
ARadauer Java Desktop Framework Allgemeine Java-Themen 3
C JUNG Framework - einfacher Graph Allgemeine Java-Themen 7
H Java6 Scripting Framework. Allgemeine Java-Themen 3
N Was benötigt man fürs Java Media Framework? Allgemeine Java-Themen 12
J Problem mit Java Multimedia Framework Allgemeine Java-Themen 6
J Eure Meinung - Das JMF (Java Media Framework) Allgemeine Java-Themen 3
G Java Media Framework - Probleme Allgemeine Java-Themen 8
R Entsprechung von Stack() im Collections Framework...? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben