در ریاضی و دانش رایانه، **واهِلِش** **به برنامه‌نویسی خطی** برنامه‌ای دُرُست (integer program) را به برنامه‌ای خطی می‌ترادیساند. در این ترادیسی، هر متغیر {\displaystyle x\_{i}\in \{0,1\}} در برنامهٔ درست با متغیری خطی {\displaystyle 0\leq x\_{i}\leq 1} جایگزین می‌شود. این واهلش پرسمانی ان‌پی سخت را به پرسمانی خطی که در زمانی چند جمله‌ای حل می‌شود می‌ترادیساند. پاسخ به برنامهٔ خطی به دست آمده، اطلاع‌های سودمندی را دربارهٔ برنامهٔ درست اصلی فراهم می‌آورد.

برنامه‌ای درست و واهلش خطی این برنامه.

نمونه
-----

برای نمونه، به پرسمان پوشش مجموعه می‌پردازیم. مجموعه‌ای مانند F و زیرمجموعه‌های {\displaystyle {S\_{0},S\_{1},...}\subseteq U} از این مجموعه داده شده‌اند. این پرسمان شماری از {\displaystyle S\_{i}}ها را می‌جوید که یکایش (اجتماع) این زیرمجموعه‌ها مجموعه Fخواهد بود.

در برنامهٔ درست برای پوشش مجموعه، برای هر زیرمجموعهٔ {\displaystyle S\_{i}} متغیری بولی x\_i داریم.

یکایش زیرمجموعه‌های گزینش شده باید برابر با F باشد. به سخنی دیگر، هر {\displaystyle e\_{j}\in F} باید در این یکایش باشد: {\displaystyle \sum \_{\{i|e\_{j}\in S\_{i}\}}x\_{j}\geq 1}. این پاوند را پاوند یکایش می‌نامیم.

هم‌چنین، پاوندِ {\displaystyle x\_{i}\in \{0,1\}} برای هر متغیر x\_i نشان می‌دهد که آیا زیرمجموعه {\displaystyle S\_{i}} در پاسخ خواهد بود یا نه. به سخنی دیگرِ، ارزش یک/صفر برای {\displaystyle x\_{i}} نشان می‌دهد که زیرمجموعهٔ {\displaystyle S\_{i}} در پوشش هست/نیست. این پاوند را پاوند بولی می‌نامیم.

پرسمان کم‌ترین شمار زیرمجموعه‌ها را می‌جوید: {\displaystyle \min {\sum \_{i}x\_{i}}}.

واهلش به برنامهٔ خطی هر پاوند بولی {\displaystyle x\_{i}\in \{0,1\}} را با پاوند {\displaystyle 0\leq x\_{i}\leq 1} جایگزین می‌کند. برنامهٔ خطی به دست آمده وزنی را برای هر زیرمجموعه فرضیده است؛ ولی، پاوند یکایش یکسان می‌ماند. در پاسخ به این برنامهٔ خطی، جمع وزن همهٔ زیرمجموعه‌هایی چون {\displaystyle S\_{i}} که دربردارندهٔ عضو {\displaystyle e\_{j}\in F} برابر با یک خواهند بود.

به این نمونه از پوشش مجموعه‌ای بنگرید: مجموعهٔ {\displaystyle F=\{a,b,c\}} و زیرمجموعه‌های {\displaystyle S\_{1}=\{a,b\},S\_{2}=\{b,c\},S\_{3}=\{a,c\}} را داریم. در برنامهٔ درست، سه متغیر {\displaystyle x\_{1},x\_{2},x\_{3}} خواهیم داشت. برای هر کدام از {\displaystyle a,b,c\in F} یک پاوند یکایش هست. برای نمونه، برای a پاوندِ {\displaystyle x\_{1}+x\_{3}\geq 1} را داریم. هم‌چنین، برای هر {\displaystyle S\_{i}} یک پاوند بولی {\displaystyle 0\leq x\_{i}\leq 1} داریم.

گزینش هر جفت از زیرمجموعه‌های {\displaystyle S\_{1},S\_{2},S\_{3}} پاسخی بهین است. به سخنی دیگر، هر یک از {\displaystyle \{S\_{1},S\_{2}\}}، {\displaystyle \{S\_{1},S\_{3}\}} یا {\displaystyle \{S\_{2},S\_{3}\}} یک پوشش مجموعه‌ای کمینه است؛ بنابراین پاسخ کمینه برای برنامهٔ درست برابر است با 2.

ولی، پاسخی بهین به برنامهٔ خطی {\displaystyle {\frac {3}{2}}} است. در این پاسخ، هر x\_i دارای ارزش {\frac {1}{2}} است. این پاسخ پاوندهای یکایش را برآورده می‌کند.

هم‌سنجی پاسخ واهلش و برنامه‌ی درست
----------------------------------

اگر در پاسخ بهین به برنامه‌ی خطی، هر متغیر ارزشی صفر یا یک بگیرد، این پاسخ پاسخی بهین برای برنامه‌ی درست نیز خواهد بود. با این همه،‌ ما پرسمان‌های اندکی با چینن پاسخ‌هایی داریم.

چون هر برنامه‌ی درست زیرمجموعه‌ای از برنامه‌ای خطی است،‌ پاسخ‌ها به برنامه‌ی درست نیز زیرمجموعه‌ای از پاسخ‌ها به برنامه‌ی خطی‌اند. اگر برنامه‌ی درست بیشینه‌سازی باشد،‌ پاسخ بهین به برنامه‌ی خطی همواره بزرگ‌تر از پاسخ بهین به برنامه‌ی اصلی است. به همین سان،‌ اگر برنامه‌ی درست کمینه‌سازی باشد،‌ پاسخ به برنامه ی خطی همواره کوچک‌تر از برنامه‌ی اصلی است. به سخنی دیگر،‌ پاسخ به برنامه‌ی خطی واهلیده همواره کرانی بالا (پایین) برای برنامه‌ای درست بیشینه‌سازی (کمینه‌سازی) است.

در نمونه‌ی بالا برای پوشش مجموعه‌ی،‌ پاسخ بهین خطی برابر بود با {\displaystyle {\frac {3}{2}}}. چون پرسمان پوشش مجموعه،‌ پرسمانی کمینه‌سازی است،‌ پاسخ بهین برای برنامه‌ی درست همواره بزرگ‌تر یا برابر با {\displaystyle {\frac {3}{2}}} خواهد بود. افزون بر این،‌ چون هر متغیر در برنامه‌ی درست می‌تواند ارزش صفر یا یک داشته باشد،‌ دست کم باید دو متغیر با ارزش یک در پاسخ بهین باشند. بنابراین، می‌توان کران پایین برای برنامه‌ی درست را به کرانی تنگ‌تر بهبود داد. این کران برابر با ۲ است.

تقریب‌زنی و گاف درستالی
-----------------------

واهلش به برنامه‌‌ی خطی،‌ شیوه‌ای استاندارد برای طراحی الگوریتم‌های تقریبی است. گاف درستالی (integral gap) مفهومی کلیدی در این زمینه است. در واهلش، گاف درستالی نسبت بیشینه میان برنامه‌ی درست و برنامه‌ی خطی را نشان می‌دهد. اگر {\displaystyle M\_{d}} پاسخ بهین برای برنامه‌ی درست و اگر {\displaystyle M\_{v}} پاسخ بهین برای برنامه‌ی خطی باشند،‌ گاف درستالی در کمینه‌سازی به دیسه‌ی {\displaystyle GD={\frac {M\_{d}}{M\_{v}}}} تعریف می‌شود و در بیشینه‌سازی برابر است با {\displaystyle GD={\frac {M\_{v}}{M\_{d}}}}. بنابراین، گاف درستالی همواره بزرگ‌تر از یک است. در نمونه‌ی بالا چون پرسمان کمینه‌سازی،‌گاف درستالی برابر است با {\displaystyle {\frac {4}{3}}}.

گاف درستالی کاربرد فراوانی برای یافتن نسبت تقریب در الگوریتم‌های تقریبی دارد. برخی الگوریتم‌های تقریبی این روش گِردسازی را به کار می‌برند: برای هر واسخ واهلیده‌ی {\displaystyle M\_{v}} پاسخی درست را می‌یابند که کوچک‌تر از {\displaystyle RG.M\_{v}} است ({\displaystyle RG} همان نسبت گردسازی (rounding ratio) است).

پانویس
------