Schrift
[thread]12623[/thread]

Modul für Semiringe gesucht



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
pktm
 2008-10-12 22:14
#115429 #115429
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Weiß jemand, ob es sowas in der Art schin gibt?
Wer generu wissen will, was ein Semiring ist, bitte sehr: http://de.wikipedia.org/wiki/Halbring_(Algebraisch...

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
moritz
 2008-10-12 23:15
#115435 #115435
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Was sollte das Modul denn tun?
pktm
 2008-10-12 23:54
#115438 #115438
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Na, es sollte eine solche Datenstruktur repräsentieren können und über deren Operationen verfügen.

Ein Semiring ist ja immer ein Fünftupel, dessen Elemente in bestimmten Relationen zueinander stehen. Man kann ziemlich viele solcher 5tupel finden.
Mir würde es schon reichen, wenn ich die zwei mir wichtigsten Semiringe zur Verfügung hätte: den boolschen und den tropischen SR.

Die beiden haben jeweils andere Operationen auf unterschiedliche Trägermengen.
http://www.intergastro-service.de (mein erstes CMS :) )
LanX-
 2008-10-13 02:34
#115440 #115440
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Mir ist nicht ganz klar was du vorhast, die boolesche Algebra ist in wohl jeder modernen Programmiersprache von Haus aus integriert....

NACHTRAG: Und für den Tropischen Halbring brauchst du als Grundmenge die Reellen Zahlen inklusive Plus-Unendlich, mit den Operationen Min und Plus. Reelle Zahlen ahmt man gewöhnlich mit Floatingpoints nach, Hier wirst du noch einen Scalar für Unendlich definieren müssen und die Operatoren min und + entsprechend überladen müssen.

Ansatz 1: Objecte
Ansatz 2: Tied-Variablen

Obs das als Modul gibt...???

Ich würd mal in den Source von BigInt schauen und im Umfeld recherchieren. [*] Alternativ könntest du dich ja pragmatisch damit begnügen die größtmögliche Floatzahl als Ersatz für Unendlich zu nehmen. Schon der Vergleich von Booleschem und Tropischen Halbring sollte zeigen, dass ein generelles Modul für Halbringe nicht trivial machbar ist. NACHTRAG2:[*] Math::Roman oder Math::Complex zeigen wie man Zahlenräume erweitern und Operatoren überlädt.
Für den Anfang sollte es reichen dir deine eigenen subs für min() und plus() zu schreiben die auf den Scalar "Unendlich" entstprechend reagieren.
pktm
 2008-10-13 15:04
#115455 #115455
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
LanX-+2008-10-13 00:34:07--
Mir ist nicht ganz klar was du vorhast, die boolesche Algebra ist in wohl jeder modernen Programmiersprache von Haus aus integriert....


Ja, das ist mir klar, aber es gibt ja, wie du auch erkannt hast, noch andere algebraische Strukturen. Und Semiringe sind eine Generalisierung solcher Gewichtsstrukturen. Die boolsche Algebra ist *eine mögliche* variante davon.

LanX-+2008-10-13 00:34:07--
Schon der Vergleich von Booleschem und Tropischen Halbring sollte zeigen, dass ein generelles Modul für Halbringe nicht trivial machbar ist.


Das weiß ich, einer meiner Dozenten hat das die letzten Jahre in C++ implementiert.
Ich hatte nur die Hoffnung, dass es schon etwas in der Art irgendwo gäbe, um den Entwicklungsaufwand gering zu halten.
In der Tat muss man speziell auf Dinge wie unendlich reagieren, aber das kann man alles per Konvention festlegen und die Eingaben dann auf Symbolebene behandeln.

Zu den Floats: intern würde ich da den logarithmus nehmen, der ist besser zu berechnen. Es gibt ja auch einen log-Semiring, bzw. einen neg-log-Semiring, eben weil Floats ziemlich schnell schlecht zu berechnen sind.

Aber um mal auf diese Bibliotheken zu kommen, die es da schon gibt: Ist es sehr schwer, Wrapper um C++-Funktionen zu schreiben?
http://www.intergastro-service.de (mein erstes CMS :) )
Ronnie
 2008-10-13 15:10
#115456 #115456
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
pktm+2008-10-13 13:04:33--
Aber um mal auf diese Bibliotheken zu kommen, die es da schon gibt: Ist es sehr schwer, Wrapper um C++-Funktionen zu schreiben?

http://www.swig.org/
pktm
 2008-10-13 15:16
#115457 #115457
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ok, jetzt nurnoch eine Möglichkeit finden, dafür einen Schein zu bekommen :D
http://www.intergastro-service.de (mein erstes CMS :) )
LanX-
 2008-10-13 16:12
#115461 #115461
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
das es auf einen Schein ohne Schweiss hinausläuft war ja klar...

und was deinen Dozenten anbelangt, wie er die Reellen Zahlen zufriedenstellend "implementiert" dürfte für so manchen Mathematiker sehr interessant sein. (Ich warte noch darauf dass ein Informatiker beikommt und mir erzählt er hätte die größtmögliche Primzahl implementiert und sie heißt 42.)

Um das ganze sachlich abzuhandeln, Perl bietet dir wie gesagt alles um es einfach "so weit wie möglich" zu implementieren, man nennt es Scalare und Overloading! Weiter wird dir das kaum ein Modul vereinfachen

du hast immer 2 Grundoperationen, sowie ein 0 und ein 1 Element von denen sich alle anderen Operationen ableiten sowie eine Grundmenge. JEDES Modul wird dir abverlangen diese zu definieren und dir denken abverlangen.

Beispiel für die 2-Elementige Boolesche Algebra

Man belegt den Scalar 0 mit dem 0 Element und den Scalar 1 mit dem 1 Element des Halbrings und bildet alle anderen Grundelemente irgendwie auf Scalare ab

Man überlade + und *
OR auf +
AND auf *

Alle anderen Operationen ergeben sich aus Anwendung dieser Grundoperationen.

Zusätzlich kannste noch Konstanten definieren wie NULL, EINS und wie bei tropischen Halbring INF.

Solange deine Grundoperationen Elemente der Grundmenge wieder auf Elemente der Grundmenge abbilden und bei unzulässigen Scalaren eine Fehlermeldung schmeißen , bist du auf der sicheren Seite.

Dann kannste z.B. auch sowas schreiben

Code (perl): (dl )
1
2
use Semiring::Blafasel;
$scalar += EINS * $scalar;


und bei bedarf einfach ne andere Semigruppe usen!


schau dir an wie CPAN:Math::Complex es gelöst hat!
pktm
 2008-10-13 16:19
#115462 #115462
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
LanX-+2008-10-13 14:12:11--
das es auf einen Schein ohne Schweiss hinausläuft war ja klar...


Nein, das lasse ich mir nicht nachsagen. Es ist einfach nur so, dass ich wie wohl jeder hier auch andere Dinge zu tun habe, nämlich meine Arbeit. Bei Studis wie mir bedeutet das, Seminararbeiten zu erbringen. Und ich bin nicht gewillt, so einen enormen Arbeitsaufwand zu Lasten meiner anderen Seminararbeiten in Kauf zu nehmen, für etwas, wovon ich nur ganz gering profitiere. Daher die Idee, den Wert der Arbeit zu steigern. Und das naheliegendste wäre, den Wrapper mit einer Seminararbeit zu koppeln. So mache ich das meistens.

Und ohne Schweiß ist das das sowieso nicht. Dieser Vorwurf ist schlichtweg unverschämt. Wenn es so wenig Arbeit ist, und man das mal eben abends machen kann, bitte. Ich geb Dir auch gernen einen dafür aus.
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2008-10-13 16:23
#115463 #115463
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
LanX-+2008-10-13 14:12:11--

Solange deine Grundoperationen Elemente der Grundmenge wieder auf Elemente der Grundmenge abbilden und bei unzulässigen Scalaren eine Fehlermeldung schmeißen , bist du auf der sicheren Seite.


Interessant sind für mich sowieso nur abgeschlossene Semiringe (müsste eigentlich per Definition schon so sein).

Noch eine kleine Designfrage.
Gesetz dem Fall, ich bastel mir sowas zusammen, wäre es sinnvoll, Semiring als sozusagen abstrakte Klasse zu erstellen, die Platzhalter für die zu überladenden Operatoren beinhaltet? Sollten die Konstanten eher in diese Klasse, oder in die abgeleiteten Klassen?

Oder Solle ich Semiring besser nur als Namensraum auffassen?
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2008-10-12 22:14.