ó Ì"Oc@sxddlTddlTd„Zd„Zd„Zd„Zd„Zd d d„Zd„Z eed „Z d d „Z d S( iÿÿÿÿ(t*cst‡fd†|jƒS(sThe default variable order.cs |ˆkS(N((tvar(t assignment(sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyt s(tfind_iftvars(Rtcsp((RsQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytfirst_unassigned_variable scsDd„‰tgˆjD]}||kr|^q‡‡fd†ƒS(s#Minimum-remaining-values heuristic.cSst|j|ƒS(N(tlentdomains(RR((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytnum_legal_valuesscs ˆˆ|ƒS(N((R(RR (sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyRs(targminR(RRtv((RR sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytmrv s %cCstS(N(tTrue(RRtvalueRtremovalstnconflicts_counter((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyt no_inference scCs¹x²|j|D]£}||krxz|j|D]j}|dcd7<|j|||ƒ|j|||ƒtkr‰|j|||ƒn|j||ƒq/W|j|s±tSqqWtS(s2Prune neighbor values inconsistent with var=value.ii(t neighborsR tassignt has_conflictRtprunetunassigntFalse(RRRRRRtBtb((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytforward_checking#s   cCs0t|g|j|D]}||f^q|ƒS(sMaintain arc consistency.(tAC3R(RRRRRtX((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytmac1scCsË|dkrEg|jD]&}|j|D]}||f^q'q}nx|rÆ|jƒ\}}t||||ƒrH|j|s†tSx:|j|D](}||kr”|j||fƒq”q”WqHqHWtS(sConstraint PropagationN( tNoneRRtpoptreviseR RtappendR(RtqueueRtXitXktXj((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyR6s 9   !csgt}xZˆjˆD]J‰t‡‡‡‡fd†ˆjˆƒrˆjˆˆ|ƒt}qqW|S(s!Return true if we remove a value.csˆjˆˆˆ|ƒS(N(t arc_conflict(ty(txR&R$R(sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyRIs(RR teveryRR(RR$R&Rtrevised((R&R$R)RsQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyR!Ds ( csI‡‡‡‡fd†‰dg}dg}ˆi||ƒ}|||fS(Ncs t|ƒtˆjƒkr|Sˆ|ˆƒ}xÕˆj|D]Æ}|dcd7<ˆj|||ƒtkr<|dcd7<ˆj|||ƒˆj||ƒ}ˆˆ|||||ƒrâˆ|||ƒ}|dk râ|Snˆj|ƒˆj ||ƒq<q<WdS(Nii( RRR RRRtsupposeRtrestoreR(RRtassign_counterRRRtresult(t backtracktselect_unassigned_variablet inferenceR(sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyR0Ts   i((RR1R2RR.R/((R2R0R1RsQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytbacktracking_searchPs   i †cCs·d„}i|_}x6|jD]+}||||ƒ}|j|||ƒq Wxat|ƒD]S}|j|ƒ}|s{|Stj|ƒ}||||ƒ}|j|||ƒq\WdS(sBSolve a CSP by stochastic hillclimbing on the number of conflicts.cs#tˆjˆ‡‡‡fd†ƒS(sBReturn the value that will give var the least number of conflicts.csˆjˆ|ˆƒS(N(R(tval(RtcurrentR(sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyRvs(targmin_random_tieR (RRR5((RR5RsQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pytmin_conflicts_valuers N(R5RRtrangetconflicted_varstrandomtchoiceR(Rt max_stepsR7R5RR4tit conflicted((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyt min_conflictsos  N( tutilsRRR RRRRRR!R3R?(((sQC:\Users\Íéêüëáò\Desktop\paketo2_0700281\paketo2_0700281\Problem2_1\csp_search.pyts