• Hm, ich weiß irgendwie nicht genau, wie ich das jetzt am besten angehen soll. Dass ich auf der linken Seite im head assigned(P,M) v -assigned(P,M) stehen hab, ist mir ja klar.


    Aber muss ich jetzt in diesen body einfach alle Bedingungen reinschreiben?


    Ich hab mal testmaeßig folgende Regel aufgestellt:
    assigned(P,M) v -assigned(P,M) :- paper(P), pc(M).
    Erwartungsgemaeß werden dann einfach alle moeglichen Kombinationen ausgespuckt, weil ich ja noch keine weiteren constraints definiert habe.


    Aber wo genau schreib ich diese ICs hin? Kommen die darunter oder gibt es dann eben nur diese eine Regel und alle moeglichen constraints kommen in den body ... ? :confused:


    Waere fuer eine Hilfestellung sehr dankbar. :)


  • Aber wo genau schreib ich diese ICs hin? Kommen die darunter oder gibt es dann eben nur diese eine Regel und alle moeglichen constraints kommen in den body ... ? :confused:


    die 6 regeln von oben musst du nicht nocheinmal hineinschreiben, es reicht, wenn du dlv mit guess.dl und check.dl aufrufst. das einzige, was du in die guess.dl sonst noch schreiben musst, ist die überprüfung, ob jedes paper an genau 4 reviewer geht.

  • hmm...habe jetzt versucht, first/last so zu definieren:

    Code
    1. first(M,P) :- succ(M,_,P), not succ(_,M,P).
    2. last(M,P) :- succ(_,M,P), not succ(M,_,P).


    lt. DLV-manual:

    Quote

    By safety of rules or constraints we mean that each variable occurring in the head of a rule, in a negation-as-failure literal, in a built-in comparative predicate [...], as a guard or in the symbolic set of an aggregate also occurs in at least one non-comparative positive literal in the body of the same rule (resp. the same constraint).

    alle variablen, die im kopf der regel und in einem negation-as-failure literal vorkommen (M und P), finden sich auch in einem positiven literal (succ(M,_,P) bzw. succ(_,M,P)). der rest (comparative predicate, guard, etc.) kommt in den beiden regeln nicht vor.


    hat jemand eine idee, warum DLV diese regeln für nicht safe hält?

  • Hm, irgendwie hab ich noch immer nicht ganz erfasst, wie ich das Problem richtig loesen kann.


    Meine Ueberlegungen:
    Die ersten Befehle in der guess.dl muessten ja ungefaehr so aussehen:
    assigned(P,M1) v -assigned(P,M1) :- pc(M1), paper(P).
    assigned(P,M2) v -assigned(P,M2) :- pc(M2), paper(P).
    assigned(P,M3) v -assigned(P,M3) :- pc(M3), paper(P).
    assigned(P,M4) v -assigned(P,M4) :- pc(M4), paper(P).


    Damit die minimalen Teilmengen als Answerset rauskommen. Wenn man nichts weiter tut, bekommt man natuerlich alle moeglichen Kombinationen raus, ich muss jedoch mit Hilfe von irgendwelchen Constraints die Answerset-Loesungen so hintrimmen, dass es ungefaehr so aussieht:
    {assigned(P,M1), assigned(P,M2), assigned(P,M3), assigned(P,M4)}


    So weit glaube ich mal alles verstanden zu haben (oder doch nicht? Falls ich auf dem falschen Weg bin, bitte um Berichtigung).


    Fehlen "nur" noch die Constraints, die die Answerset-Loesungen einschraenken sollen. Wie geht man das dann am Vernuenftigsten an? Mit einer Zaehlfunktion (definiert man dann danach einfach modifizierte Regeln aus den Folien und dann mit Constraints)? Oder gibt es einen anderen Ansatz auch noch?


    Ich will keine vorgekaute Loesung, das ist schon klar. Aber vielleicht kann mir jemand auf die Spruenge helfen, damit ich das dann besser verstehe und implementieren kann! Danke!


  • assigned(P,M1) v -assigned(P,M1) :- pc(M1), paper(P).
    assigned(P,M2) v -assigned(P,M2) :- pc(M2), paper(P).
    assigned(P,M3) v -assigned(P,M3) :- pc(M3), paper(P).
    assigned(P,M4) v -assigned(P,M4) :- pc(M4), paper(P).


    Jede Rule in diesem Programm ist logisch equivalent, dadurch könntest du genausogut nur

    Code
    1. assigned(P,M) v -assigned(P,M) :- pc(M), paper(P).

    schreiben.

  • Hallo,
    Irgendwie bekomme ich immer 0 datasets. Mit der Aggregate-Funktion geht es wunderbar, aber mit der selbstgeschriebenen klappts noch nicht.


    Gibt es eine Möglichkeit wie bei Prolog zu debuggen, damit man sieht was er macht?


    Nett wäre auch, wenn er die Anzahl der Datasets anzeigt...


    Mike


  • Nein, leider ist das debuggen ziemlich muehsam. Man muss so lange Regeln wieder entfernen, bis man die falsche Regel gefunden hat.

  • ich bin jetzt schon soweit das ich sag ich kill jedes answer set das nicht genau vier assigneds hat, das funktioniert ja auch schon super, nur hab ich das probelm das trotzdem noch die answer sets durchrutscht in denen alle negativ sind und ich noch keinen weg gefunden habe das zu unterbinden hat wer eine idee zu meinem problem?

    ----------------------------------------------
    It's better to burn out, than to fade away

  • ich bin jetzt schon soweit das ich sag ich kill jedes answer set das nicht genau vier assigneds hat, das funktioniert ja auch schon super, nur hab ich das probelm das trotzdem noch die answer sets durchrutscht in denen alle negativ sind und ich noch keinen weg gefunden habe das zu unterbinden hat wer eine idee zu meinem problem?


    http://www.informatik-forum.at…php?p=428615&postcount=12


    (so ähnlich habe ich es auch gelöst)

  • irgendwie ist mir das noch unklar was er genau damit gemeint hat...

    ----------------------------------------------
    It's better to burn out, than to fade away

  • Hm, irgendwie komm ich einfach nicht weiter. :(
    Ich hab jetzt den Befehl mit assigned mal drinnen, der ja quasi ganz ganz viele "moegliche" Answersets ausspuckt.


    Ich hab jetzt versucht, die Zaehlfunktion zu implementieren - das funktioniert insofern, dass es mir einfach bei jedem moeglichen AS eine Summe von 5 ausspuckt, auch wenn zB. gar niemand assigned ist. Wie kann ich da eine Bedingung schreiben, dass das weg ist bzw. wie benutze ich diese Zaehlfunktion richtig?


    Wie es eigentlich funktionieren sollte, ist mir schon klar - die assigned-Members abzaehlen und dann durch einen IC jene papers "rausputzen", denen nicht 4 member zugeteilt worden sind. Aber wie ich da programmiertechnisch hinkomme, ist mir momentan noch ein Raetsel. Kann mir da vllt bitte jmd helfen?


  • Ich hab jetzt versucht, die Zaehlfunktion zu implementieren - das funktioniert insofern, dass es mir einfach bei jedem moeglichen AS eine Summe von 5 ausspuckt, auch wenn zB. gar niemand assigned ist. Wie kann ich da eine Bedingung schreiben, dass das weg ist bzw. wie benutze ich diese Zaehlfunktion richtig?


    du hast wohl vergessen, die lineare ordnung getrennt für jedes paper zu machen.

  • Hm, mittlerweile weiß ich, was mein Fehler beim Abzaehlen war - ich dummes Maedel hab vergessen, abzupruefen, ob das Paper eh zu dem Member assigned ist.


    Nun hab ich nur noch eine Frage bezueglich der Answersets, die rauskommen sollen. Angenommen, es gibt mehrere Paper - sollen die Teilmengen da auch als gueltige Answersets rauskommen?


    Also zB. paper(p1), paper(p2)
    AS1: {assigned(p1,m1), assigned(p1,m2), assigned(p1,m3), assigned(p1,m4)}
    AS2: {assigned(p2,m1), assigned(p2,m2), assigned(p2,m3), assigned(p2,m4)}
    AS3: {assigned(p1,m1), assigned(p1,m2), assigned(p1,m3), assigned(p1,m4), assigned(p2,m1), assigned(p2,m2), assigned(p2,m3), assigned(p2,m4)}


    Oder darf da dann nur das AS3 rauskommen?


    (Und wieder mal danke, mdk, fuer deine Hilfe. Ich glaub ohne sie haett ich es bei weitem nicht bis hierher geschafft! :) )

  • Nun hab ich nur noch eine Frage bezueglich der Answersets, die rauskommen sollen. Angenommen, es gibt mehrere Paper - sollen die Teilmengen da auch als gueltige Answersets rauskommen?


    Also zB. paper(p1), paper(p2)
    AS1: {assigned(p1,m1), assigned(p1,m2), assigned(p1,m3), assigned(p1,m4)}
    AS2: {assigned(p2,m1), assigned(p2,m2), assigned(p2,m3), assigned(p2,m4)}
    AS3: {assigned(p1,m1), assigned(p1,m2), assigned(p1,m3), assigned(p1,m4), assigned(p2,m1), assigned(p2,m2), assigned(p2,m3), assigned(p2,m4)}


    Oder darf da dann nur das AS3 rauskommen?


    Derzeit ist der Konsens wohl das nur AS3 rauskommen darf. Wie man das macht -> posting #12 und #34 in diesem Thread.