# --- 5.7 Sémantiques Basées sur le Classement (Ranking) ---
print("\n--- 5.7 Semantiques Basees sur le Classement (Ranking) ---")
if not jvm_ready:
print("ERREUR: JVM non demarree.")
else:
print("JVM prete. Execution des exemples de Ranking Semantics...")
ranking_imports_ok = False
try:
import jpype
from jpype.types import *
from org.tweetyproject.arg.dung.syntax import DungTheory, Argument, Attack
from org.tweetyproject.arg.rankings.reasoner import (
CategorizerRankingReasoner, BurdenBasedRankingReasoner, DiscussionBasedRankingReasoner,
TuplesRankingReasoner, StrategyBasedRankingReasoner, SAFRankingReasoner,
CountingRankingReasoner, PropagationRankingReasoner
)
from org.tweetyproject.arg.rankings.util import RankingTools
from org.tweetyproject.arg.dung.semantics import Semantics
from org.tweetyproject.math.probability import Probability
print("Imports pour Ranking Semantics reussis.")
ranking_imports_ok = True
if ranking_imports_ok:
print("\nDefinition des AAFs exemples...")
# Example 1 (Bonzon et al. AAAI 2016)
aaf_ex1 = DungTheory()
args1 = {name: Argument(name) for name in "abcde"}
for arg in args1.values(): aaf_ex1.add(arg)
attacks1 = [("a","e"), ("d","a"), ("e","d"), ("c","e"), ("b","c"), ("b","a")]
for s, t in attacks1: aaf_ex1.add(Attack(args1[s], args1[t]))
print(" - AAF Example 1 (Bonzon) defini.")
# Example 2 (Pu et al. CoRR 2015)
aaf_ex2 = DungTheory()
args2 = {f"x{i}": Argument(f"x{i}") for i in range(1, 5)}
for arg in args2.values(): aaf_ex2.add(arg)
attacks2 = [("x2","x3"), ("x2","x1"), ("x3","x2"), ("x3","x3"), ("x4","x2")]
for s, t in attacks2: aaf_ex2.add(Attack(args2[s], args2[t]))
print(" - AAF Example 2 (Pu) defini.")
# Example 5 (Delobelle Thesis 2017)
aaf_ex5 = DungTheory()
args5 = {name: Argument(name) for name in "abcdefghij"}
for arg in args5.values(): aaf_ex5.add(arg)
attacks5 = [("a","b"), ("b","c"), ("b","f"), ("d","g"), ("d","f"),
("e","h"), ("e","d"), ("e","i"), ("h","g"), ("j","i")]
for s, t in attacks5: aaf_ex5.add(Attack(args5[s], args5[t]))
print(" - AAF Example 5 (Delobelle) defini.")
# Example 4a (Matt & Toni JELIA 2008)
aaf_ex4a = DungTheory()
args4a = {name: Argument(name) for name in "abcdefg"}
for arg in args4a.values(): aaf_ex4a.add(arg)
attacks4a = [("b","a"),("c","a"),("d","a"),("f","a"),("e","d"),("g","f")]
for s, t in attacks4a: aaf_ex4a.add(Attack(args4a[s], args4a[t]))
print(" - AAF Example 4a (Matt & Toni) defini.")
print("\n--- Application des Raisonneurs de Classement ---")
# 1. Categorizer
print("\n* Categorizer:")
try:
r_cat = CategorizerRankingReasoner()
rank_cat1 = r_cat.getModel(aaf_ex1)
rank_cat2 = r_cat.getModel(aaf_ex2)
print(f" - AAF Ex1: {RankingTools.roundRanking(rank_cat1, 2)}")
print(f" - AAF Ex2: {RankingTools.roundRanking(rank_cat2, 3)}")
except Exception as e: print(f" Erreur Categorizer: {e}")
# 2. Burden-Based
print("\n* Burden-Based:")
try:
r_bb = BurdenBasedRankingReasoner()
rank_bb1 = r_bb.getModel(aaf_ex1)
print(f" - AAF Ex1: {rank_bb1}")
except Exception as e: print(f" Erreur BurdenBased: {e}")
# 3. Discussion-Based
print("\n* Discussion-Based:")
try:
r_db = DiscussionBasedRankingReasoner()
rank_db1 = r_db.getModel(aaf_ex1)
print(f" - AAF Ex1: {rank_db1}")
except Exception as e: print(f" Erreur DiscussionBased: {e}")
# 4. Tuples*
print("\n* Tuples*:")
try:
r_tup = TuplesRankingReasoner()
rank_tup5 = r_tup.getModel(aaf_ex5)
print(f" - AAF Ex5: {rank_tup5}")
except Exception as e: print(f" Erreur Tuples: {e}")
# 5. Strategy-Based
print("\n* Strategy-Based:")
try:
r_sb = StrategyBasedRankingReasoner()
rank_sb4a = r_sb.getModel(aaf_ex4a)
print(f" - AAF Ex4a: {RankingTools.roundRanking(rank_sb4a, 3)}")
except Exception as e: print(f" Erreur StrategyBased: {e}")
# 6. SAF-Based
print("\n* SAF-Based (SimpleProduct):")
try:
r_saf = SAFRankingReasoner()
rank_saf1 = r_saf.getModel(aaf_ex1)
print(f" - AAF Ex1: {RankingTools.roundRanking(rank_saf1, 2)}")
except Exception as e: print(f" Erreur SAFBased: {e}")
# 7. Counting Semantics
print("\n* Counting Semantics:")
try:
r_count = CountingRankingReasoner(0.98, 0.001)
rank_count1 = r_count.getModel(aaf_ex1)
print(f" - AAF Ex1: {RankingTools.roundRanking(rank_count1, 2)}")
except Exception as e: print(f" Erreur Counting: {e}")
# 8. Propagation
print("\n* Propagation Semantics:")
try:
r_prop1 = PropagationRankingReasoner(0.75, False, PropagationRankingReasoner.PropagationSemantics.PROPAGATION1)
rank_prop1_ex5 = r_prop1.getModel(aaf_ex5)
print(f" - AAF Ex5 (e=0.75): {rank_prop1_ex5}")
except Exception as e: print(f" Erreur Propagation: {e}")
except ImportError as e: print(f"Erreur d'import pour Ranking Semantics : {e}.")
except jpype.JException as e_java: print(f"Erreur Java generale Ranking: {e_java.message()}")
except Exception as e_gen: print(f"Erreur Python inattendue Ranking: {e_gen}"); import traceback; traceback.print_exc()