رفع ناسازگاری، یک استراتژی، جهت انتخاب ترتیب اجرای قوانین است هنگامی که بیش از یک قانون بتواند اجرا شود. به طور کلی، در سیستمهایی که رفع ناسازگاری در روند استنتاج آنها صورت میگیرد، موتور استنتاج یک رویه ی سه مرحله ایی شناسایی- رفع – عمل را بر روی مجموعهی قوانین اعمال میکند [1]:
- شناسایی: تشخیص قوانینی که میتوانند اجرا گردند و قراردادن آنها در مجموعه ی ناسازگاری.
- رفع: استفاده از یک استراتژی به منظور انتخاب یک قانون از مجموعه ی ناسازگاری.
- عمل: اجرای قانون منتخب و افزودن نتایج آن به حافظه ی کاری[1].
در استراتژیهای رفع ناسازگاری، لیست اجرا[2]، فهرستی از تمامی قوانینی است که شرایط آنها ارضاء شده ولی هنوز اجرا نشده اند. این لیست، همانند یک پشته[3] عمل میکند و قانونی که در بالای آن قرار دارد، پیش از سایر قوانین موجود در آن اجرا میگردد. یک استراتژی رفع ناسازگاری، ترتیبی را برای اجرای قوانین موجود در لیست اجرا با اولویت یکسان تعیین مینماید.
در این فصل در رابطه با روشهایی که به منظور رفع ناسازگاری در سیستمهای مختلف بکار برده میشود، توضیحاتی ارائه شده است. این توضیحات، در ابتدا استراتژیهای سادهتر و در ادامه روشهایی با پیچیدگی بیشتر را شرح میدهد.
به طور کلی به منظور رفع ناسازگاری در بسیاری از سیستمها، از روشهای سادهایی استفاده شده که در ادامه در رابطه با هر یک از این استراتژیها توضیحات مختصری ارائه میگردد [1]:
- استراتژی تصادفی: در این استراتژی، به هر فعالسازی[4]، یک عدد تصادفی نسبت داده میشود که به منظور تعیین مکان قرارگیری آن فعالسازی، در میان فعالسازیهایی با اولویت یکسان، بکار برده خواهد شد. در برخی از سیستمها، این عدد تصادفی هنگامی که استراتژی تغییر مییابد نیز نگاه داشته میشود تا در هنگام انتخاب مجدد این استراتژی ترتیبی مشابه، تولید گردد.
- استراتژی عمقی: در این استراتژی، قوانینی که بتازگی فعال شدهاند، در لیست اجرا، در بالای تمامی قوانین با اولویت یکسان قرار میگیرند. به عنوان مثال، فرض کنید در یک مجموعهی قوانین و حقایق، حقیقت fact-a منجر به فعالسازی قوانین rule-1 و rule-2 گردد و حقیقت fact-b منجر به فعالسازی قوانین rule-3 و rule-4 گردد. حال اگر حقیقت fact-a پیش از حقیقت fact-b وارد سیستم گردد، قوانین rule-3 و rule-4 در بالای قوانین rule-1 و rule-2 در لیست اجرا قرار خواهند گرفت. مکان rule-1 نسبت به rule-2 و rule-3 نسبت به rule-4، قراردادی خواهد بود.
- استراتژی عرضی: در این استراتژی، قوانینی که بتازگی فعال شدهاند، در پایین تمامی قوانین با اولویت یکسان قرار میگیرند. به عنوان مثال، فرض کنید در یک مجموعهی قوانین و حقایق، حقیقت fact-a منجر به فعالسازی قوانین rule-1 و rule-2 گردد و حقیقت fact-b منجر به فعالسازی قوانین rule-3 و rule-4 گردد. حال اگر حقیقت fact-a پیش از حقیقت fact-b وارد سیستم گردد، قوانین rule-1 و rule-2 در بالای قوانین rule-3 و rule-4 در لیست اجرا قرار خواهند گرفت. در این روش نیز مکان rule-1 نسبت به rule-2 و rule-3 نسبت به rule-4، قراردادی خواهد بود.
- استراتژی سادگی[5]: در این استراتژی، در میان قوانین با اولویت یکسان، قوانینی که بتازگی فعال شدهاند، در بالای تمامی قوانین فعالشده با مشخصه[6]ی یکسان و یا بیشتر، قرار میگیرند. مشخصهی یک قانون با تعداد مقایسههایی که باید در قسمت سمت چپ[7] یک قانون انجام گیرد، تعیین میشود. هر مقایسه با یک ثابت و یا متغیرهایی که سابقاً مقید شدهاند، یک واحد به مشخصهی قانون میافزاید. همچنین هر فراخوانی تابع که در قسمت سمت چپ یک قانون انجام گیرد، نیز مشخصهی قانون را یک واحد افزایش میدهد. توابع بولی and، or و not، مشخصهی یک قانون را تغییر نمیدهند، اما آرگومانهای آنها سبب تغییر مشخصه میگردند. فراخوانی توابع در صورتی که در داخل یک فراخوانی تابع صورت گیرند نیز سبب افزایش مشخصه نمیگردند. به عنوان مثال مشخصهی قانونی که در زیر تعریف شده است، 5 میباشد.
مقایسه با یک ثابت، مقایسه متغیر ورودی x با انقیاد قبلی آن و فراخوانی توابع numberp، < و >، هر یک، یک واحد به مشخصهی قانون میافزاید و فراخوانی توابع and و + تاثیری در مقدار مشخصه نخواهد داشت.
- استراتژی پیچیدگی[8]: در این استراتژی، در میان قوانین با اولویت یکسان، قوانینی که بتازگی فعال شدهاند، در بالای تمامی قوانین فعالشده با مشخصهی یکسان و یا کمتر، قرار میگیرند.
- استراتژی LEX[9]: در این استراتژی در ابتدا، تازگی (تأخر)[10] نهاد الگوهایی[11] که منجر به فعالسازی قانون شدهاند، به منظور تعیین مکان قرارگیری قانون فعالشده، بکار برده میشوند. هر حقیقت و نمونه[12]، ذاتا ً با یک “برچسب زمان” که نشاندهندهی تازگی نسبی آن در مقایسه با هر حقیقت و یا نمونهی دیگری در سیستم است، نشانهگذاری میگردد. نهاد الگوهای مربوط به فعالسازی هر قانون به منظور تعیین مکان قرارگیری، به ترتیب نزولی مرتب میگردند. یک فعالسازی با نهاد الگوهایی با تازگی بیشتر، پیش از فعالسازیهایی با نهاد الگوهایی با تازگی کمتر قرار میگیرد. برای تعیین ترتیب قرارگیری دو فعالسازی، برچسبهای زمان مرتب شدهی دو فعالسازی، با شروع از دو بزرگترین برچسب زمان، یک به یک مقایسه میگردند. این مقایسه باید تا هنگامی که برچسب زمان یک فعالسازی، بزرگتر از برچسب زمان متناظر با آن از فعالسازی دیگر، باشد ادامه یابد. فعالسازی با برچسب زمان بزرگتر پیش از سایر فعالسازیها در لیست اجرا قرار میگیرد. اگر یک فعالسازی نهاد الگوهای بیشتری نسبت به سایر فعالسازیها داشته باشد و برچسب زمانهای مقایسه شده، همگی مساوی باشند، فعالسازی با برچسب زمانهای بیشتر پیش از سایر فعالسازیها در لیست اجرا قرار میگیرد. اگر دو فعالسازی دارای تازگی دقیقاً مساوی باشند، فعالسازی با مشخصهی بیشتر در بالای فعالسازی با مشخصهی کمتر قرار میگیرد. برچسب زمان یک عامل شرطی not، کمتر از برچسب زمان یک نهاد الگو میباشد.
به عنوان نمونه، شش فعالسازی زیر را در نظر بگیرید (کاما در پایان هر فعالسازی نشاندهندهی حضور یک عامل شرطی not میباشد). در این مثال فرض بر این است که برچسب زمان حقایق، مشابه با اندیس آنها باشد.
لیستی که در زیر آمده، ترتیبی است که استراتژی LEX برای اجرا در نظر میگیرد.
برطبق این استراتژی، ترتیب اجرای قوانین از بالا به پایین خواهد بود.
- استراتژی MEA[13]: در این استراتژی در ابتدا، برچسب زمان اولین نهاد الگوی مربوط به اولین الگو، به منظور تعیین مکان قرارگیری قانون فعالشده، بکار برده میشود. فعالسازیایی که برچسب زمان اولین الگوی آن بزرگتر از برچسب زمان اولین الگوی سایر فعالسازیها باشد، پیش از سایر فعالسازیها در لیست اجرا قرار میگیرد. اگر دو فعالسازی دارای دو برچسب زمان متناظر با اولین الگوی مساوی باشند، از استراتژی LEX برای تعیین مکان قرارگیری فعالسازیها استفاده میگردد. به عنوان مثال، ترتیبی که این استراتژی برای اجرای شش فعالسازی مثال قبل در نظر میگیرد، به صورت زیر (از بالا به پایین) خواهد بود.
[1] Working Memory
[2] Agenda
[3] Stack
[4] Activation
[5] Simplicity strategy
[6] Specificity
[8]Complexity strategy
[9] Lexicographic sort
[10] Recency
[11] Pattern entities
[12] Instance
[13] Means-Ends-Analysis