پیاده سازی VIKOR با پایتون – به زبان ساده
«VIKOR» یکی از روشهای «تصمیمگیری چندمعیاره» (Multi-Criteria Decision Making | MCDM) است. این روش برای حل مسائل پیچیده با در نظر گرفتن چند معیار مختلف به کار میرود. برای خودکارسازی فرایند تصمیمگیری میتوان الگوریتم آن را با کمک زبان برنامه نویسی پایتون پیادهسازی کرد. فرض کنید، میخواهید گوشی موبایل بخرید. نکته اول اینجاست که باید چند معیار مختلف مانند قیمت، کیفیت دوربین، اندازه گوشی و نسخه سیستم عامل را درنظر بگیرید. بعضی از ویژگیها مانند قیمت با زیاد شدن، اثر منفی بر روی انتخاب گزینه دارند. در چنین شرایطی میتوان از VIKOR استفاده کرد. در صورت پیاده سازی VIKOR با پایتون میتوانیم به راحتی از ابزارهای قدرتمند این زبان برنامه نویسی استفاده کنیم.
- در این مطلب، با مفهوم VIKOR برای گرفتن تصمیم با وجود معیارهای مختلف آشنا میشوید.
- با روشهای مختلف پیاده سازی VIKOR با پایتون آشنا میشوید.
- متوجه میشوید کتابخانه PyMCDM در پایتون چیست و چطور با کمک آن VIKOR را محاسبه کنید.
- استفاده از ماژولهای تخصصی برای پیاده سازی VIKOR با پایتون را یاد میگیرید.
- با کمک جدولی ساده تمام مولفههای مورد استفاده برای محاسبه VIKOR را یاد میگیرید.
- متوجه میشوید که در کدام مسائل الگوریتم VIKOR را برای رسیدن به جواب به کار ببرید.


در این مطلب از مجله فرادرس، دو روش کاربردی برای پیادهسازی VIKOR با پایتون بررسی میشوند. ابتدا نحوه نوشتن برنامه محاسبه این تکنیک را با زبان پایتون توضیح داده و سپس کدهای مربوط به هر روش را تحلیل میکنیم. در بخش پایانی نیز، تکنیک VIKOR به صورت خلاصه و جمعبندی شده معرفی شده است.
پیاده سازی VIKOR با پایتون
پیاده سازی VIKOR با پایتون با هدف انتخاب بهترین گزینه از میان چند گزینه، در کوتاهترین زمان ممکن و بر اساس مجموعهای از معیارها انجام میشود. روش ویکور، ابزاری قدرتمند برای ارزیابی و رتبهبندی گزینهها بر اساس معیارهای متضاد است. از این روش به طور گسترده در موقعیتهای پیچیده تصمیمگیری استفاده میشود. در ادامه این مطلب، دو روش زیر را برای پیاده سازی VIKOR با پایتون بررسی خواهیم کرد.
- استفاده از کتابخانه «PyMCDM»
- استفاده از کتابخانههای تخصصی پایتون برای انجام عملیات ریاضی - Numpy و Pandas
در صورت نیاز به آشنایی هرچه بیشتر و بهتر با تکنیک VIKOR و پیادهسازی آن (از ابتدا تا انتها با پایتون) پیشنهاد میکنیم فیلم آموزش تصمیم گیری چند معیاره ویکور VIKOR همراه با پیاده سازی در اکسل و پایتون را در فرادرس مشاهده بکنید. به منظور کمک به مخاطبان مجله، لینک دسترسی به این آموزش را در پایین نیز قرار دادهایم.
در هر دو روش بالا از «Numpy» هم استفاده کردهایم. «ویکور» (VIKOR) یکی از روشهای تصمیمگیری برای انتخاب گزینه مناسب از بین گزینههای در دسترس با وجود چند معیار گوناگون است. زبان برنامه نویسی پایتون گزینه بسیار خوبی برای پیادهسازی الگوریتم این روش تصمیمگیری است. زیرا پایتون، سینتکس سادهای دارد، یادگیری آن راحت است، کتابخانههای بسیار قدرتمندی دارد و جامعه کاربری قوی آن به حل بسیاری از مشکلات کمک میکند.

در بخشهای بعد، هر دو روش بالا را بررسی میکنیم.
تا به اینجای مطلب، شناخت کلی از مفهوم VIKOR و روشهای پیاده سازی آن با پایتون بدست آوردهایم. در ادامه این تکنیکها را با کمک کدنویسی بررسی میکنیم. در صورت تمایل به مطالعه این دست از مطالب، پیشنهاد میکنیم که حتما از اپلیکیشن مجله فرادرس استفاده کنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
استفاده از کتابخانه PyMCDM برای پیاده سازی VIKOR با پایتون
کتابخانه PyMCDM در پایتون به طور تخصصی برای حل مسائل مربوط به تصمیمگیری چندمعیاره توسعه داده شده است. تکنیک VIKOR هم یکی از روشهای حل چنین مسائلی است. برای استفاده از این تکنیک در کتابخانه مورد نظر، کلاسی به نام VIKOR() تعریف شده است. تکنیک VIKOR بر اساس مکانیزم تصمیمگیری خاصی کار میکند. در این مکانیزم تصمیمگیری، گزینههای مختلف با همدیگر مقایسه شده و بر اساس فاصله آنها از حالت ایدهآل رتبهبندی میشوند. در نتیجه بهترین گزینه انتخاب میشود.
برای پیادهسازی این تکنیک تصمیمگیری میتوانیم از کتابخانه pymcdm در پایتون استفاده کنیم. به منظور حل این مسئله لازم است ابتدا از تابعی برای نرمال سازی دادهها استفاده شود. این تابع با هدف نرمالسازی مقادیر موجود در ستونهای ماتریسها به کار برده میشود. تابع نرمالسازی باید به شکل «foo(x, cost)» نوشته شود، یعنی دو پارامتر دریافت بکند.
- «x»: پارامتر اول همان محوری است که باید دادههای آن نرمالایز شوند.
- «cost»: پارامتر دوم هم مقداری با نوع Boolean است.
- اگر مقدار cost برابر با True بود، یعنی x از نوع «معیار هزینه» (Cost Criterion) است.
- اگر مقدار cost برابر با False بود، یعنی x از نوع «معیار سود» (Profit Criterion) است.

نکته: عبارت foo کلمهای دلخواه و فرضی است که برای نشان دادن نام تابع به کار برده شده است. این نام هرچیز دیگری میتواند باشد.
| مقدار cost | نوع معیار | توضیح ساده |
|---|---|---|
| True | هزینه | عدد کمتر بهتر است. |
| False | سود | عدد بیشتر بهتر است. |
در کادر پایین روش استفاده از کتابخانه pymcdm را برای پیادهسازی تکنیک VIKOR بررسی کردهایم.
بعد از اجرای کدهای بالا خروجی زیر در کنسول پایتون نمایش داده میشود.
[np.float64(0.5679), np.float64(0.7667), np.float64(1.0), np.float64(0.7493), np.float64(0.0)]- خطوط ۱ و ۲: ابتدا کلاس VIKOR و کتابخانه numpy را وارد میکنیم.
- خط۴: سپس شیئی از کلاس VIKOR میسازیم.
- خط ۵ تا ۱۱: در این خطوط، ماتریس دلخواهی تعریف میکنیم. این ماتریس مثالی از جدول معیارهای مختلف برای تصمیمگیری است. در آن هر سطر نشاندهنده یک گزینه و هر ستون نماینده یک معیار است.
- خط ۱۳: وزن معیارها را به صورت مساوی در آرایه weights مشخص میکنیم.
- خط ۱۵: با آرایه types تعیین میکنیم که همه معیارها از نوع سود هستند.
- خط ۱۷: روش VIKOR را روی ماتریس، وزنها و نوع معیارها اجرا میکنیم.
- خط ۱۸: در پایان، مقادیر نهایی ترجیح هر گزینه محاسبه و به صورت گرد شده چاپ میشوند.
کسب مهارت در پیاده سازی پروژه های پایتون
کسب مهارت در زمینه نوشتن الگوریتمهای مختلف مانند الگوریتم تصمیمگیری VIKOR نیازمند تمرین و تکرار است. بهترین روش برای این کار پیادهسازی پروژههای متنوع و واقعی است. کاربردهای پایتون در حوزههای متنوعی مانند صنعت، تجارت، هوش مصنوعی، مراکز علمی و غیره گسترش پیدا کرده است. فرادرس تلاش میکند تا روش پیادهسازی پروژههای گوناگون این زبان را آموزش بدهد. یکی از بهترین روشهای یاد گرفتن برنامه نویسی برای افراد تازه کار و حتی کاربران حرفهای، پیادهسازی و اجرای پروژههای مربوط به دنیای واقعی است.

در فرایند اجرای این نوع از پروژهها گاهی لازم است که از چند ابزار مختلف در کنار هم استفاده کنیم. فرادرس با گردآوری مجموعهای از ایدههای متنوع و اساتید حرفهای فیلمهای آموزشی خیلی خوبی در این زمینه تولید و منتشر کرده است. هر کدام از فیلمهای این مجموعه آموزشی، به بررسی پروژههایی میپردازند که در دنیای واقعی قابل استفاده هستند. بعد از تماشا و تمرین این پروژهها برنامه نویسان میتوانند با خلاقیت و مهارتهای خود به آنها شاخ و برگ داده و پروژههای بزرگتری خلق بکنند.
در پایین چند مورد از فیلمهای پروژهمحور پایتون را معرفی کردهایم.
- فیلم آموزش پروژه محور جنگو و پایتون درباره طراحی سایت و وب اپلیکیشن با فریمورک Django + گواهینامه
- فیلم آموزش ساخت دستیار هوشمند با Ollama و پروتکل MCP، پروژه عملی LLM + گواهینامه
- فیلم آموزش ساخت چت روم با سوکت نویسی در پایتون، Socket Programming در Python
- فیلم آموزش بهینه سازی سبد سهام در پایتون با روش های هوشمند، پورتفولیو مالی
- فیلم آموزش ساخت داشبورد هوش تجاری با Streamlit پروژه عملی + گواهینامه
در صورت تمایل با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی هدایت شده و فیلمهای پروژهمحور بیشتری را تماشا کنید.
استفاده از کتابخانههای تخصصی برای پیاده سازی VIKOR با پایتون
تکنیک VIKOR برای انتخاب بهترین گزینه توافقی طراحی شده است. این تکنیک بر پایه تعادل بین دو ایده اصلی کار میکند.
- «کارایی گروهی» (Group Utility): نشان میدهد عملکرد کلی هر مدل چقدر خوب است.
- «پشیمانی» (Regret): نشان میدهد ضعیفترین معیار هر مدل تا چه حد بد عمل کرده است.
به دلیل توجه همزمان به این دو مفهوم، VIKOR کاربرد زیادی دارد. بخصوص در سناریوهایی که از بعضی نقاط ضعف نمیتوان چشمپوشی کرد.
ابتدا در سیستم VIKOR امتیازی به نام «Q» محاسبه میشود. Q «عملکرد کلی» (Overall Performance) با نشانگر «S» و «جریمه بدترین حالت» (Worst-Case Penalty) با نام «R» را با هم ترکیب میکند. پارامتر «v» برای کنترل اینکه کدام بخش بیشتر مورد تاکید قرار گیرد، استفاده میشود. با تغییر مقدار «v» میتوان اهمیت نسبی عملکرد کلی و بدترین حالت را در محاسبه امتیاز نهایی کنترل کرد.

مهمترین دلیل اعتبار زیاد VIKOR، بررسی منصفانه گزینههای مختلف است. این تکنیک به صورت کورکورانه به عملکرد متوسط پاداش نمیدهد. اگر مدلی از جهت معیار خاصی خیلی بد عمل بکند، VIKOR به این مسئله توجه کرده و آن را برجسته میکند. به همین دلیل، تکنیک VIKOR در زمان تصمیمگیری رفتاری مسئولانه و مشابه با «داور با اخلاق» دارد.
| مولفه VIKOR | نقش اصلی |
|---|---|
| «کارایی گروهی» (Group Utility) | بررسی عملکرد کلی گزینهها |
| «پشیمانی» (Regret) | نشان دادن ضعفهای بزرگ |
| Q | امتیاز نهایی، ترکیب S و R |
| S | عملکرد کلی |
| R | جریمه بدترین حالت |
| v | تعیین اهمیت بخشها در Q |
در کادر پایین روش پیادهسازی تکنیک VIKOR را با کمک کتابخانههای تخصصی پایتون بررسی کردهایم. در این کد، روش VIKOR را به صورت دستی برای مقایسه سه مدل «LSTM» و «RNN» و «CNN» و بر اساس سه معیار «RMSE» و «MAE» و «R2» پیادهسازی کردهایم. مدلهای مقایسه شده در کد پایین جزو مشهورترین مدلهای شبکههای عصبی هستند. برای آشنایی با شبکههای عصبی پیشنهاد میکنیم که مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.
بعد از اجرای کدهای بالا خروجی زیر در کنسول پایتون نمایش داده میشود.
Model RMSE MAE R2 VIKOR_S VIKOR_R VIKOR_Q VIKOR_Rank
1 RNN 61.532498 44.602686 0.817019 0.000000 0.000000 0.000000 1
0 LSTM 81.594761 45.970054 0.776359 0.359329 0.199465 0.478862 2
2 CNN 95.059328 54.209597 0.696460 1.000000 0.333333 1.000000 3- ابتدا کتابخانههای numpy و «Pandas» و ماژول MinMaxScaler را وارد میکنیم.
- در گام اول، دادههای عملکرد مدلها شامل RMSE و MAE و R2 را تعریف کرده و آنها را به DataFrame تبدیل میکنیم.
- در گام دوم، مقادیر معیارها را نرمالسازی میکنیم تا قابل مقایسه شوند. چون R2 معیار سود است، مقدار آن را معکوس میکنیم.
- در گام سوم، وزن معیارها را برابر در نظر میگیریم و بهترین f_star و بدترین f_minus مقدار هر معیار را بهدست میآوریم.
- در گام چهارم، برای هر مدل مقادیر S و R محاسبه میشود که بهترتیب نشاندهنده مطلوبیت کلی و بیشترین نارضایتی هستند.
- در گام پنجم، شاخص Q در روش VIKOR با مقدار v=0.5 محاسبه میشود.
- در گام ششم، مقادیر S و R و Q به جدول اضافه شده و مدلها بر اساس Q رتبهبندی میشوند.
- در گام آخر، نتایج مرتب شده چاپ میشوند. با این کار، بهترین مدل مشخص میشود.
چطور با کمک فرادرس پایتون را یاد بگیریم؟
فرادرس برای کمک به یادگیری هرچه بهتر پایتون مجموعهای از فیلمهای آموزشی متنوع را تولید و منتشر کرده است. این فیلمها از مفاهیم ساده تا پیشرفته پایتون را پوشش میدهند. وبسایت فرادرس جزو بهترین منابع تولید فیلمهای آموزشی استاندارد و باکیفیت است. فیلمهای فرادرس با کمک اساتید حرفهای، تکنیکهای پیشرفته و جدید را آموزش میدهند. در این فیلمها از نکات ساده تا بخشهای بسیار پیشرفتهای مانند شبکههای عصبی و یادگیری ماشین آموزش داده شدهاند. زبان پایتون به دلیل سینتکس بسیار ساده به یکی از گزینههای پرطرفدار در بین افراد تازهکار و علاقهمند به برنامه نویسی تبدیل شده است.
در پایین، چند مورد از فیلمهای مربوط به آموزش زبان پایتون را معرفی میکنیم.
- فیلم آموزش برنامه نویسی پایتون پیشرفته، ترفندهای Python + گواهینامه
- فیلم آموزش برنامه نویسی شی گرا در Python + گواهینامه
- فیلم آموزش تجزیه و تحلیل و آماده سازی داده ها با «پایتون» (Python) + گواهینامه
- فیلم آموزش تجزیه و تحلیل داده های مالی با پایتون، بخش یکم + گواهینامه
- فیلم آموزش یادگیری ماشین در تحلیل بازارهای مالی با پایتون، دوره مقدماتی + گواهینامه
برای مشاهده فیلمهای بیشتر بر روی تصویر زیر کلیک کنید.

در ادامه تکنیک تصمیمگیری VIKOR را تعریف کردهایم.
VIKOR چیست؟
کلمه VIKOR مخففی از عبارت (VIšekriterijumsko KOmpromisno Rangiranje) به معنای «رتبهبندی چندمعیاره توافقی» است. البته این عبارت به زبان کروات نوشته شده است. این روش در سال ۱۹۷۹ میلادی و توسط آقای «سرافیم اوپریچوویچ» (Serafim Opricović) توسعه داده شد.
متد VIKOR با هدف حل مسائل تصمیمگیری طراحی شده است که در آنها معیارها با یکدیگر در تضاد هستند و امکان مقایسه مستقیم آنها به دلیل تفاوت واحدها وجود ندارد. فرض اصلی این تکنیک بر آن است که با یافتن راه حل مصالحهای بین معیارها گوناگون میتوان اختلافها را حل کرد. هدف تصمیمگیرنده این است که گزینه نهایی تا حد ممکن به حالت ایدهآل نزدیک باشد. در این فرآیند، VIKOR تمامی گزینههای قابل قبول را ارزیابی و رتبهبندی میکند. در نهایت بهترین گزینه با بالاترین امتیاز را به عنوان راه حل توافقی معرفی میکند.

در ابتدا، معیارهای مؤثر در تصمیمگیری شناسایی میشوند. سپس با استفاده از تکنیکهای مشخص، وزن هر معیار تعیین شده و میزان تأثیر آن در فرایند تصمیمگیری ارزیابی میشود. پس از شناسایی معیارها و تعیین وزن آنها، ماتریس تصمیمگیری تشکیل میشود و مقادیر گزینهها نرمالسازی میگردند. سپس با محاسبه شاخصهای S (سودمندی گروهی)، R (پشیمانی فردی) و Q (شاخص ترکیبی)، گزینهها رتبهبندی شده و راهحل توافقی نزدیک به ایدهآل، با کمترین پشیمانی و بیشترین سودمندی گروهی، انتخاب میشود.
جمعبندی
در این مطلب از مجله فرادرس به معرفی روش VIKOR (رتبهبندی توافقی چندمعیاره) و پیادهسازی آن در پایتون پرداختهایم. VIKOR برای حل مسائل پیچیده با معیارهای متضاد طراحی شده و با محاسبه شاخصهای S (مطلوبیت گروهی)، R (حداکثر پشیمانی فردی) و Q (شاخص توافقی) گزینهها را رتبهبندی میکند. در پایتون روشهای مختلفی برای پیادهسازی این تکنیک وجود دارد. دو مورد از روشهای پرکاربرد شامل استفاده از کتابخانه pymcdm و پیادهسازی دستی با numpy و pandas هستند. در روش دوم تمام مراحل محاسبه به صورت گامبهگام انجام میشود.
این روشها برای انتخاب بهترین گزینه توافقی در شرایط متعارض بسیار مفید هستند. پایتون به دلیل کتابخانههای قدرتمند و انعطافپذیری بالا گزینه بسیار مناسبی برای خودکارسازی اجرای این عملیات است. بسیاری از مدیران MBA، مهندسان صنایع، فعالان حوزه مدیریت مالی و غیره از این زبان برای پیادهسازی راحت و سریع الگوریتمهای تصمیمگیری استفاده میکنند.












