2009-04-05 5 views
0

Es gibt bestimmte Knoten, die sich in festen Abständen voneinander befinden. An jedem dieser Knoten besteht ein gewisser Bedarf an Wasser (in Einheiten von m^3/s).Ich möchte eine GUI erstellen, um eine Lösung für ein spezifisches Optimierungsproblem zu implementieren.

Die Knoten sind durch ein Netzwerk von Rohren verbunden, wobei die Länge des Rohres, das verschiedene Knoten verbindet, festgelegt ist und die Strömungsraten durch jedes Rohrsegment rückwärts von der Nachfrage an den Endknoten berechnet werden.

Jetzt muss ich die festen Kosten der Auswahl der zu verwendenden Rohre minimieren, was eine Funktion der Durchflussrate, der Länge des Rohrs und des Rohrdurchmessers ist (und ich kenne die Korrelation zwischen den Kosten und diese Parameter in einer funktionalen Form).

Die Einschränkungen sind, dass der Druckabfall (eigentlich der dynamische Kopf) größer als die angegebenen Werte an jedem Knoten sein muss.

Ich weiß, wie man dies in ein lineares Optimierungsproblem umwandelt (indem man jedes Segment in eine Reihe von Rohren unterschiedlicher Länge mit spezifischen Durchmessern aufteilt) und die Simplex-Algorithmen verwendet.

Was ich tun möchte, ist eine GUI-Schnittstelle zu implementieren, wo der Benutzer die Knoten angeben können, wobei die Segmente die verschiedenen Knoten und die entsprechenden Abstände und die Mindest Köpfe durch simpling Klicken Verbinden und Ziehen und Eingabe der Informationen in einer Box, damit ich mit diesen Daten die optimale Lösung berechnen und anzeigen kann.

Kann mir jemand auf eine Sprache und eine Referenz verweisen, wo ich das auf einfache Weise machen kann? Ich bin bereit, die Mühe zu geben und es zu lernen, während ich programmiere.

Ich weiß, wie das Optimierungsproblem für ein vordefiniertes Netzwerk mit linearer Programmierung gelöst werden kann, und einen bestimmten Satz von Parameterwerten, die ich über die Befehlszeile eingib. Ich möchte wissen, wie man eine GUI erstellt, um das Netzwerk zu zeichnen und die Daten einzugeben.

Vielen Dank!

Antwort

1

Wenn Sie bereits C++ verwenden und nur eine GUI für Ihre App entwickeln möchten, dann ist vielleicht Qt eine gute Wahl.

Wenn Sie nach dem Optimierungsproblem fragen, ist das eine andere Sache. Ich würde empfehlen, das zu erledigen, bevor man sich über die GUI Gedanken macht.

+0

Danke. Um zu verdeutlichen, weiß ich, wie man das Optimierungsproblem mittels linearer Programmierung löst (dh der Simplex-Algorithmus). Ich bin nicht spezifisch in C++, ich möchte die GUI einfach machen. –

+0

OK, nächste Frage: Wie sieht "easy" für dich aus? GUI-Code von Hand schreiben? Verwenden Sie eine Drag & Drop-Oberfläche, um es zu erstellen? Klingt so, als ob Sie das Netzwerk zur Laufzeit mithilfe einer vorhandenen UI-Bibliothek generieren möchten. Vielleicht Qt oder ein Äquivalent wird es tun Werfen Sie einen Blick auf den Link, den ich gesendet habe. – duffymo

+0

GUI-Code manuell schreiben ist in Ordnung. Ich schaute auf den Link und Qt scheint genau das, was ich brauche. Vielen Dank. –

1

Graphviz könnte ein guter Ort sein, um einige Ideen über die GUI zu bekommen. Feed in Ihrem Netzwerk und Graphviz wird es zeichnen. Es gibt möglicherweise einige Bearbeitungsfunktionen im Graphviz-Code, mit denen Sie auch beginnen können, aber ich habe sie nicht verwendet.

+0

+1 - Ich bin mir einer interaktiven Funktion für Graphviz nicht bewusst, aber es ist ein toller Gedanke, um das Netzwerk zu visualisieren. – duffymo

Verwandte Themen