Schrift
[thread]6892[/thread]

Ein Constraint System (Seite 2)



<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
kabel
 2005-04-14 22:51
#53803 #53803
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
WaaaaaaaaaaaaS?! :cool:

lass dir ruhig zeit :)
-- stefan
esskar
 2005-04-14 23:07
#53804 #53804
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
use warnings;

require "Constraint.pm";

my $var1 = Constraint::Var::Number->new;
my $var2 = Constraint::Var::Number->new;
my $var3 = Constraint::Var::Number->new;

my $evaluator = Constraint::Evaluator->new;

$evaluator->connect([$var1, '='], ['+', $var2], ['+', $var3]);

$var2->set(3);
$var3->set(4);

$evaluator->eval;

print $var1->get;
esskar
 2005-04-14 23:09
#53805 #53805
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das könnt man jetzt noch verbessern, aber das überlass ich anderen. :)

Zusatz: ich benutze '#' als ** operator!\n\n

<!--EDIT|esskar|1113505877-->
esskar
 2005-04-15 00:03
#53806 #53806
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Update:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use strict;
use warnings;

require "Constraint.pm";

my $var1 = Constraint::Var::Number->new;
my $var2 = Constraint::Var::Number->new;
my $var3 = Constraint::Var::Number->new;
my $var4 = Constraint::Var::Number->new;
my $var5 = Constraint::Var::Number->new;
my $var6 = Constraint::Var::Number->new;

my $evaluator = Constraint::Evaluator->new;

$evaluator->connect([$var1, '='], ['+', $var2], ['+', $var3]);
$evaluator->connect([$var2, '='], ['+', $var4], ['#', $var6]);
$evaluator->connect([$var3, '='], ['+', $var5], ['#', $var6]);

$var4->set(5);
$var5->set(9);
$var6->set(2);

$evaluator->eval;

print $var1->get;
\n\n

<!--EDIT|esskar|1113509304-->
esskar
 2005-04-15 00:07
#53807 #53807
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
perfekt wäre jetzt sowas

Code: (dl )
$evaluator->connect([$var1, '='], ['+', ['+', $var2], ['#', $var4]], ['+', ['+', $var3], ['#', $var4]]);
\n\n

<!--EDIT|esskar|1113509273-->
kabel
 2005-04-15 01:35
#53808 #53808
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
sieht aus wie ein interpreter :)

bei dir muss die reihenfolge der connect anweisungen eingehalten werden.
ansonsten liefert $el->get im eval() undef, und dann gibts sowas wie $result/undef.

ein interpreter ist leider kein constraint system ;)
der gleiche code müsste aus var1=106, var5=9 und var6=2 auch var4=5 evaluieren.

hier bin ich allerdings vorsichtig, wahrscheinlich kann es mein code auch nicht... *durch*die*luft*pfeiff*
ähm das beispiel mit der tabellenkalkulation war wohl irgendwie schief. das constraintsystem müsste auch sowas wie "a+b=5*c" auflösen können.
ich werde das morgen mal testen.
-- stefan
murphy
 2005-04-15 11:46
#53809 #53809
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Bei dieser ganzen Sache gibt es doch ein generelles Problem:

Angenommen wir haben die Gleichung a+b = c als "Constraint-System" implementiert und alle drei Variablen haben gültige Werte, z.B. a=1, b=2, c=3. Setzen wir nun c=5; was soll das "Constraint-System" nun tun? a=3 setzen oder b=4?

Langer Rede kurzer Sinn: Das gewünschte Verhalten ist gar nicht wohldefiniert!
When C++ is your hammer, every problem looks like your thumb.
renee
 2005-04-15 11:56
#53810 #53810
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da müsste man sage, welche Variable erhalten bleiben soll...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2005-04-15 12:54
#53811 #53811
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=murphy,15.04.2005, 09:46]Bei dieser ganzen Sache gibt es doch ein generelles Problem:

Angenommen wir haben die Gleichung a+b = c als "Constraint-System" implementiert und alle drei Variablen haben gültige Werte, z.B. a=1, b=2, c=3. Setzen wir nun c=5; was soll das "Constraint-System" nun tun? a=3 setzen oder b=4?

Langer Rede kurzer Sinn: Das gewünschte Verhalten ist gar nicht wohldefiniert![/quote]
Genau, das stört mich auch schon von Anfang an. Ev. müsste man das direkte Setzen bestimmter Variablen unterbinden können. Dann hätte man zwei Sorten: Eingabevariablen und interne Variablen.\n\n

<!--EDIT|Crian|1113555325-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pKai
 2005-04-15 13:07
#53812 #53812
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Bei meiner Lösung (noch in Arbeit) habe ich folgendes Verhalten diesbezüglich vorgesehen beim testen eines (einer?) Constraint:
1) Variable noch nicht gesetz: Dann prüfen ob die anderen Variablenwerte eine Berechnung dieses Wertes zulassen und den Wert ggf. berechnen. Und "erfüllt" oder "unbestimmt" zurückmelden.
2) Variable bereits gesetzt: Prüfen ob genug der anderen gebundenen Variablen gesetzt sind um diesen Wert zu erhalten. Wenn Ja Prüfung dementsprechend: Ergebnis melden: "erfüllt"/"unbestimmt"/"nicht erfüllt".

Fall 2 deckt das geschilderte Problem ab: a+b=c (a=3,b=4,c=5) ist "nicht erfüllt" (vielleicht besser: "nicht erfüllbar")

Bei Fall 1 sehe ich bzgl "und den Wert ggf. berechnen" eigentlich noch ein Problem. Für unsere Pythagoras-Problem ist alles deterministisch, zumindest, wenn man beim Wurzelziehen sich einfach auf den positiven Wert festlegt. Aber eigentlich müssten da Ergebnismengen möglich sein...

--
Gerade noch Crians post gesehen während des editierens: Bei mir kann jede Variable Eingabe- oder Ausgabe sein.
I sense a soul in search of answers.
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-04-14 11:33.