سؤال

أنا أبحث عن خوارزمية لتقسيم رسم بياني ثنائي الفحم إلى قو حق مع قيود محددة. لست متأكدا مما إذا كانت هناك خوارزميات موجودة حل مشكلتي أم لا.

لدي رسم بياني ثنائي الفحم غير معرف حيث العقد هي العملاء ( $ C $ ) والخدمات ( $ S $ < / span>). أريد تقسيم هذا إلى العديد من الأخبار الأصغر، مما يحد من مقدار الخدمات في كل مجموعة فرعية إلى بعض الأكمام القصيرة $ n $ . لسوء الحظ، تبحث عن قطع منصات إلكترونية منفصلة ليست كافية لأن اتصال الرسم البياني مرتفع للغاية، لذلك أعتقد أنني سأحتاج إلى تكرار الخدمات.

رسميا، أريد مجموعة من الشركات منصوصية بحيث:

  • كل عميل $ c \ in C $ يظهر في الفحلقة الفرعية واحدة بالضبط
  • تظهر جميع الحواف في مجموعة واحدة بالضبط (الشخص الذي يظهر فيه عميلهم)
  • كل خدمة $ s \ in s $ يمكن أن تظهر في أي عدد من الأخضر (لا بأس أن تكرار الخدمات لمساعدة الانقسام)
  • يجب أن يكون لكل مجموعة فرعية في معظم $ N $ الخدمات (حيث $ n $ هو ثابت معين مضمون أن تكون أكبر من أعلى عدد من الخدمات المتصلة بأي عميل واحد)
  • يجب أن يكون لدى
  • subgraphs أكبر عدد ممكن من العملاء (بدون هذا التقييد، فإنه قابل للحل تافهة من خلال وضع كل عميل في مجموعة فرعية الخاصة بهم مع نسخة من خدماتهم). يمكن أن يكون مزرئا وليس أثبتا رسميا.

هل يمكن لأي شخص أن يقترح خوارزمية للقيام بذلك؟ عدد العقد ليس ضخما (حوالي 1000 عملية عملاء، 100 خدمات، مع كل عميل يتصل بخدمات 5 أو أقل) حتى نهج القوة الغاشمة أو أولئك الذين لديهم تحجيم BID-O قد يكون مناسبا.

هل كانت مفيدة؟

المحلول

تنبعث منه رائحة مثل قد تكون صعبة NP.

نهج واحد معقول هو استخدام SAT Solver أو Solver ILP.لنفترض أنك قررت أنك تريد أن تحصل على $ M $ subgraphs.ثم يمكنك الحصول على متغيرات منطقية $ x_ {i، k}، y_ {j، k} $ تشير إلى أن العميل $ i$ يذهب إلى subgraph $ k $ والخدمة $ J $ يذهب إلى subgraph $ K $ .يمكنك الحصول على مجموعة من القيود (البنود) بناء على متطلباتك ثم اسأل SAT Solver أو SOTLP Solver للعثور على حل ممكن.وقت التشغيل الأسوأ هو الأسي.قد لا يعمل هذا جيدا بما يكفي في وضعك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top