আমি কোনও সমস্যা এনকোড করার জন্য একটি স্যাট সলভার ব্যবহার করছি এবং স্যাট উদাহরণের অংশ হিসাবে আমার কাছে বুলিয়ান ভেরিয়েবল যেখানে এটি উদ্দেশ্যযুক্ত যে এর মধ্যে ঠিক একটি সত্য হওয়া উচিত এবং মিথ্যা হওয়া উচিত । (আমি মাঝে মাঝে এটিকে "ওয়ান-হট" এনকোডিং হিসাবে বর্ণিত দেখেছি))
আমি " মধ্যে ঠিক এক হতে হবে" এনকোড করতে চাই । এই সীমাবদ্ধতার এনকোড করার সর্বোত্তম উপায় কী, স্যাট সলভারটিকে যতটা সম্ভব দক্ষতার সাথে চালানো যায়?
আমি এই প্রতিবন্ধকতাটি এনকোড করার জন্য অনেকগুলি উপায় দেখতে পাচ্ছি:
পেয়ারওয়াইস সীমাবদ্ধতা। আমি pairwise সীমাবদ্ধতার যোগ করতে পারিনি সবার জন্য তা নিশ্চিত করার জন্য সর্বাধিক এক সত্য, এবং তারপর যোগ তা নিশ্চিত করার জন্য অন্তত একটি সত্য । আই , জে এক্স আমি এক্স 1 ∨ এক্স 2 ∨ ⋯ ∨ এক্স এন
এই যোগ ক্লজ এবং কোন অতিরিক্ত বুলিয়ান ভেরিয়েবল।
বাইনারি এনকোডিং আমি পরিচয় করিয়ে পারে নতুন বুলিয়ান ভেরিয়েবল (বাইনারি মধ্যে) প্রতিনিধিত্ব করতে একটি পূর্ণসংখ্যা যেমন যে (কয়েক বুলিয়ান সীমাবদ্ধতা যুক্ত তা নিশ্চিত করার জন্য কাঙ্ক্ষিত সীমার মধ্যে রয়েছে)। তারপরে, আমি টি গাছ এবং অন্য সমস্ত এর মিথ্যা বল প্রয়োগ করে বাধা যুক্ত করতে পারি । অন্য কথায়, প্রতিটি , আমরা প্রয়োগকারী ধারাগুলি যুক্ত ।i 1 , i 2 , … , i lg n i 1 ≤ i ≤ n i x i x j j i = j ⇔ x j
এটি ধারাগুলি যোগ করে এবং কতগুলি অতিরিক্ত বুলিয়ান ভেরিয়েবল জানি না।
সত্য মানগুলির সংখ্যা গণনা করুন। আমি বুলিয়ান অ্যাডারের সার্কিটগুলির একটি বৃক্ষ বাস্তবায়ন করতে এবং প্রতিটি কে মিথ্যা বা সত্যের পরিবর্তে 0 বা 1 হিসাবে বিবেচনা করে এবং এবং সিসিটিনকে SAT দফাগুলিতে রূপান্তর করতে ট্রিসিটিন রূপান্তর ব্যবহার করতে পারি। অর্ধ-সংযোজকগুলির একটি গাছ যথেষ্ট: প্রতিটি অর্ধ-সংযোজকের বহন আউটপুটকে 0 হতে সীমাবদ্ধ করুন এবং গাছে চূড়ান্ত অর্ধ-সংযোজকের চূড়ান্ত আউটপুটকে সীমাবদ্ধ রাখুন The গাছটি কোনও আকারের হতে বেছে নেওয়া যেতে পারে ( ভারসাম্য বাইনারি গাছ, বা ভারসাম্যহীন বা যাই হোক না কেন)।এক্স i
এটি গেটে করা যেতে পারে এবং এভাবে ধারা এবং নতুন বুলিয়ান ভেরিয়েবল যুক্ত করা যায়।Θ ( n ) Θ ( n )
এই পদ্ধতির একটি বিশেষ ক্ষেত্র বুলিয়ান ভেরিয়েবল পরিচয় করিয়ে দিতে হয় , যা এই ধারণার সাথে মান থাকা উচিত । এই উদ্দেশ্যটি , , এবং (যেখানে আমরা কে হিসাবে বিবেচনা করি) যোগ করে করা যেতে পারে মিথ্যা প্রতিশব্দ) জন্য । এরপরে, আমরা জন্য বিধিনিষেধগুলি add যুক্ত করতে পারি । এটি মূলত অর্ধ-সংযোজক গাছের সিসিটিন রূপান্তরের সমতুল্য, যেখানে গাছটি সর্বাধিক ভারসাম্যহীন আকার ধারণ করে।y i x 1 ∨ x 2 ∨ ⋯ ∨ x i y i ∨ ¬ x i y i ∨ ¬ y i - 1 ¬ y i ∨ x i ∨ y i - 1 y 0 i = 1 , … , N ¬ y আমি ∨ ¬ x আমি + আই=1,2,…,এন-1
প্রজাপতি নেটওয়ার্ক। আমি একটি নির্মান করতে পারে প্রজাপতি নেটওয়ার্কের উপর বিট, সীমাবদ্ধ -বিট ইনপুট হতে , সীমাবদ্ধ -বিট আউটপুট হতে , এবং একটি স্বাধীন গেট যে হিসাবে প্রতিটি 2-বিট প্রজাপতি গেট আচরণ হয় অদলবদল করে রাখা একটি নতুন নতুন বুলিয়ান ভেরিয়েবলের উপর ভিত্তি করে কোন সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিয়ে এটি অদলবদল করে বা তার ইনপুটটি অদলবদল করে না। তারপরে, আমি সারিটিকে এসএটি ক্লোজে রূপান্তর করতে টিসাইটিন রূপান্তর প্রয়োগ করতে পারি।n 000 ⋯ 01 n x 1 x 2 ⋯ x n
এর জন্য গেট প্রয়োজন এবং এর ফলে ক্লজ এবং নতুন বুলিয়ান ভেরিয়েবল যুক্ত হয়।Θ ( n lg n ) Θ ( n lg n )
আমি উপেক্ষা করে অন্য কোন পদ্ধতি আছে? আমার কোনটি ব্যবহার করা উচিত? কেউ কি এটি পরীক্ষা করেছে বা পরীক্ষামূলকভাবে তাদের চেষ্টা করেছে, বা এর কোনওটির সাথে কারও অভিজ্ঞতা আছে? স্যাট সলভার পারফরম্যান্সে এর প্রভাবটি অনুমান করার জন্য ক্লজগুলির সংখ্যা এবং / অথবা নতুন বুলিয়ান ভেরিয়েবলগুলির সংখ্যাটি কি ভাল স্ট্যান্ড-ইন মেট্রিক, বা যদি না হয় তবে আপনি কোন মেট্রিক ব্যবহার করবেন?
আমি কেবল লক্ষ্য করেছি যে এই উত্তরে স্যাট-এর জন্য কার্ডিনালিটির সীমাবদ্ধতাগুলি প্রয়োগ করার জন্য কিছু রেফারেন্স রয়েছে, অর্থাত্, এই সীমাবদ্ধতাটি প্রয়োগ করা যা হ'ল ভেরিয়েবলগুলির মধ্যে ঠিক true সত্য। সুতরাং, আমার প্রশ্নটি একটি বিশেষ ক্ষেত্রে নেমে আসে যেখানে । হতে পারে কার্ডিনালিটির সীমাবদ্ধতার উপরের সাহিত্যগুলি আমার প্রশ্নের উপর আলোকপাত করতে সহায়তা করবে।এন কে = 1