รูปแบบ/รูปแบบใดทำงานได้ดีที่สุดสำหรับการพัฒนากฎ/กลไกการตัดสินใจ [ปิด]

ฉันกำลังทำงานกับกลไกการตัดสินใจ / กลไกประเมินกฎ ตัวอย่างเช่น:

ข้อมูลนำเข้า: ลูกค้าและความผิดทั้งหมดที่ลูกค้าทำ

ข้อสรุป: ผลที่ตามมาของความผิด

กรณีตัวอย่างจะเป็น:

ข้อมูล: ลูกค้า(จอนนี่ ชิมโป, 999-00-1111), ความผิด (หน้าต่างแตก, เจ้านายตบ, เตะหัวหน้าทีมเข้าที่ขาหนีบ)

ผลลัพธ์: ได้สลิปสีชมพู

ดังนั้นส่วนของโค้ดที่ฉันต้องการเขียนจะประเมินความผิดที่แตกต่างกันตามกฎสำหรับความผิดแต่ละรายการและความผิดรวม รหัสปัจจุบันเป็นเพียงเขาวงกตของคำสั่ง if และ else ฉันแน่ใจว่าปัญหาทางธุรกิจดังกล่าวเป็นเรื่องปกติ รูปแบบการออกแบบ/องค์กรใดที่มักใช้เพื่อแก้ไขปัญหาเช่นนี้

มันเป็นรูปแบบข้อกำหนดหรือไม่? ฉันต้องการให้โค้ดเปิดเพื่อการขยาย สะอาด และยืดหยุ่น


person Perpetualcoder    schedule 24.01.2010    source แหล่งที่มา
comment
คุณต้องการที่จะเขียนหนึ่ง? คุณสามารถดูที่ Jess jessrules.com   -  person Joe    schedule 24.01.2010


คำตอบ (6)


โดยพื้นฐานแล้วกฎเกณฑ์ทางธุรกิจจะมีลักษณะเช่นนี้

forall rules:
  if <condition> then doAction();

แล้วการจัดหมวดหมู่ความผิดทั้งหมดตามความรุนแรงโดยใช้คะแนน บางทีอาจเป็นโบนัสพิเศษสำหรับ "ผู้กระทำความผิด" บ่อยครั้ง ความผิดบางอย่างอาจกลายเป็นกำหนดเวลาและอะไรก็ตามที่จำเป็น

จากนั้นร่างอัลกอริทึมคร่าวๆ อาจเป็นดังนี้:

  • ผลรวมคะแนนทั้งหมดของลูกค้า (ถ่วงน้ำหนัก)
  • เปรียบเทียบกับสูงสุด

สิ่งนี้จะตรงไปตรงมาโดยใช้โครงสร้างข้อมูลแทนที่จะเป็นหลาย ๆ อย่าง (อาจซ้อนกันลึก) ถ้า..แล้ว..อย่างอื่น

person stacker    schedule 24.01.2010
comment
รหัสปัจจุบันที่เรามีคือเขาวงกตของลูป if-else - person Perpetualcoder; 25.01.2010

ฉันสามารถแนะนำเครื่องมือที่เราใช้ในการแก้ไขปัญหาที่คล้ายกันให้คุณได้

ดู JBoss Drools: http://www.jboss.org/drools/

มันคือ BRMS: ระบบการจัดการกฎเกณฑ์ทางธุรกิจ

นี่คือวิดีโอแนะนำ: http://www.jboss.com/products/platforms/brms/

person Andrea Zilio    schedule 24.01.2010
comment
ฉันกำลังพยายามพัฒนาในแพลตฟอร์ม .net +1 สำหรับการกล่าวถึงผลิตภัณฑ์ที่ยอดเยี่ยม - person Perpetualcoder; 25.01.2010

ฉันไม่แน่ใจว่าคำตอบใด ๆ ข้างต้นมีประโยชน์ขนาดนั้น

ฉันได้เขียนส่วนประกอบที่คล้ายกันโดยใช้ แผนผังนิพจน์ คุณสามารถสร้างนิพจน์แลมบ์ดาที่แสดงถึงเพรดิเคต คอมไพล์และดำเนินการนิพจน์เหล่านั้นได้ ทั้งหมดนี้แบบไดนามิก จากนั้นทริกเกอร์การดำเนินการบางอย่างเพื่อตอบสนอง แนวทางนี้มีประสิทธิภาพ ยืดหยุ่น และขจัดความสยองขวัญแบบ if/else (ซึ่งไม่ใช่แนวทางที่แน่นอน)

อย่างไรก็ตาม สิ่งที่คุณกำลังพูดถึงจริงๆ คือการเขียนโปรแกรมลอจิก มีการใช้งาน Prolog บน .NET มากมาย Prolog เป็นภาษาที่ใช้ตรรกะซึ่งใช้กันอย่างแพร่หลายสำหรับแอปพลิเคชัน AI ซึ่งเริ่มมีพลังอย่างมากเมื่อคุณเข้าใจกระบวนทัศน์ของมันแล้ว

ลองดูสิ่งเหล่านี้บ้าง ..

person flesh    schedule 08.02.2010
comment
นี่คือสิ่งที่น่าสนใจจริงๆ ฉันไม่ใช่แฟนตัวยงของกลไกกฎเกณฑ์ทางธุรกิจเช่นกัน - person Perpetualcoder; 08.02.2010
comment
แต่..:)...ฉันก็ไม่ใช่แฟน Prolog เช่นกัน..ฉันแค่พบว่ามันน่าทึ่งมาก :) - person Perpetualcoder; 08.02.2010

คุณสามารถลองใช้สิ่งที่คล้ายกับ กลไกกฎ "ตามเหตุการณ์" นี้

person Nick Miller    schedule 06.03.2010

ฉันคิดว่า Rule Engine ที่ใช้อัลกอริทึม RETE ใด ๆ จะเหมาะกับกรณีของคุณ คุณสามารถลองน้ำลายไหล

person Mervin Yan    schedule 17.05.2010

ฉันคิดว่าคุณกำลังพยายามพัฒนาระบบผู้เชี่ยวชาญ คุณสามารถตรวจสอบคำศัพท์แล้วตรวจสอบภาษาการเขียนโปรแกรมที่เหมาะสมเป็นคำนำ ฯลฯ

person Aykut Akıncı    schedule 24.01.2010
comment
ฉันไม่ได้พยายามสร้างระบบผู้เชี่ยวชาญ - person Perpetualcoder; 25.01.2010
comment
@Perpetualcoder จริง ๆ แล้วสิ่งที่คุณระบุไว้คือระบบผู้เชี่ยวชาญอย่างแม่นยำ - person Nick Larsen; 29.01.2010
comment
ระบบผู้เชี่ยวชาญไม่ใช่เครื่องจักรการเรียนรู้สำหรับการทำงานเฉพาะด้านด้วยใช่หรือไม่ - person Perpetualcoder; 29.01.2010