পাঠ ৫৪ · ৫৭-এর মধ্যে · মডিউল ১২
Home / Courses / Engineering Economics / মাল্টিপল অ্যাট্রিবিউট

মাল্টিপল অ্যাট্রিবিউট ডিসিশন-মেকিং

Multiple attribute decision making
১০ মিনিট পড়া উন্নত · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • কেন কিছু সিদ্ধান্তে শুধু আর্থিক বিশ্লেষণই যথেষ্ট নয়
  • ওয়েটেড-স্কোরিং পদ্ধতি — ক্রাইটেরিয়া, ওজন, স্কোর ও weighted total-এর সংজ্ঞা
  • Python-এ একটি জেনেরিক weighted_score() ফাংশন তৈরি করে একাধিক বিকল্প তুলনা করা
  • এই পদ্ধতির সাবজেক্টিভিটি ঝুঁকি — এই কোর্সের অন্য বস্তুনিষ্ঠ $ হিসাবের সাথে এর পার্থক্য

১ · টাকার বাইরের ক্রাইটেরিয়া

এই কোর্সের L15-L53 পর্যন্ত প্রায় প্রতিটি পদ্ধতি ধরে নিয়েছে যে বিকল্পগুলো তুলনা করার একমাত্র মাপকাঠি টাকা — PW, AW, IRR, B/C অনুপাত। কিন্তু বাস্তবে একটি ইঞ্জিনিয়ারিং সিদ্ধান্তে প্রায়ই এমন ক্রাইটেরিয়া থাকে যা সরাসরি ডলারে রূপান্তর করা কঠিন বা অনুপযুক্ত — যেমন একটি মেশিনের নির্ভরযোগ্যতা (reliability), নিরাপত্তা (safety), পরিবেশগত প্রভাব, বা রক্ষণাবেক্ষণের সহজতা (maintainability)। যখন একাধিক এমন ক্রাইটেরিয়া একসাথে বিবেচনা করে সিদ্ধান্ত নিতে হয়, তখন তাকে মাল্টিপল অ্যাট্রিবিউট ডিসিশন-মেকিংMultiple Attribute Decision Making (MADM)একাধিক (প্রায়ই ভিন্ন এককের বা নন-মনিটারি) ক্রাইটেরিয়া একসাথে বিবেচনা করে বিকল্পগুলোর মধ্যে সিদ্ধান্ত নেওয়ার পদ্ধতি। বলা হয়।

২ · ওয়েটেড-স্কোরিং পদ্ধতি

সবচেয়ে ব্যবহৃত MADM পদ্ধতিগুলোর একটি হলো ওয়েটেড-স্কোরিং —

ধাপ ১ — স্কোর দেওয়া
প্রতিটি বিকল্পকে প্রতিটি ক্রাইটেরিয়ায় একটি স্কোর দেওয়া (যেমন ০-১০ স্কেলে), যা সেই ক্রাইটেরিয়ায় বিকল্পটি কতটা ভালো তা প্রতিফলিত করে।
ধাপ ২ — ওজন নির্ধারণ
প্রতিটি ক্রাইটেরিয়াকে তার গুরুত্ব অনুযায়ী একটি ওজন (weight) দেওয়া, যেখানে সব ওজনের যোগফল অবশ্যই $1.0$।
ধাপ ৩ — Weighted total
$$\text{Score}_j = \sum_i w_i \cdot s_{ij}$$ প্রতিটি বিকল্প j-এর জন্য প্রতিটি ক্রাইটেরিয়া i-এর ওজন ও স্কোর গুণ করে যোগ করা।
ধাপ ৪ — সেরাটি বাছাই
যে বিকল্পের weighted total score সবচেয়ে বেশি, সেটাই সব ক্রাইটেরিয়া মিলিয়ে সেরা বিকল্প হিসেবে বাছাই করা হয়।

৩ · Python-এ প্রয়োগ — তিনটি ইকুইপমেন্ট বিকল্প তুলনা

ধরা যাক তিনটি ইকুইপমেন্ট বিকল্প (Alt1, Alt2, Alt3) চারটি ক্রাইটেরিয়ায় (কস্ট-এফিশিয়েন্সি, নির্ভরযোগ্যতা, নিরাপত্তা, মেইনটেইনেবিলিটি) ০-১০ স্কেলে স্কোর করা হয়েছে, আর ক্রাইটেরিয়াগুলোর ওজন যথাক্রমে ০.৪০, ০.২৫, ০.২০, ০.১৫ (যোগফল ১.০)।

Python
# মাল্টিপল অ্যাট্রিবিউট ডিসিশন-মেকিং -- ওয়েটেড-স্কোরিং পদ্ধতি

def weighted_score(scores, weights):
    assert abs(sum(weights.values()) - 1.0) < 1e-9, "ওজনের যোগফল অবশ্যই 1.0 হতে হবে"
    return sum(weights[k] * scores[k] for k in weights)

criteria = ['cost_efficiency', 'reliability', 'safety', 'maintainability']
weights = {
    'cost_efficiency': 0.40,
    'reliability':      0.25,
    'safety':           0.20,
    'maintainability':  0.15,
}

# ০-১০ স্কেলে প্রতিটি বিকল্পের স্কোর, criteria তালিকার একই ক্রমে
alternatives = {
    'Alt1 (হাইড্রলিক প্রেস A)': dict(zip(criteria, [8, 6, 7, 9])),
    'Alt2 (হাইড্রলিক প্রেস B)': dict(zip(criteria, [6, 9, 8, 7])),
    'Alt3 (হাইড্রলিক প্রেস C)': dict(zip(criteria, [9, 5, 6, 6])),
}

print(f"ওজন: {weights}\n")

results = {}
for name, scores in alternatives.items():
    total = weighted_score(scores, weights)
    results[name] = total
    print(f"{name}: স্কোর {scores} -> weighted total = {total:.2f}")

winner = max(results, key=results.get)
print(f"\nবিজয়ী: {winner} (weighted score = {results[winner]:.2f})")

    
Alt1 = 8(0.40) + 6(0.25) + 7(0.20) + 9(0.15) = 3.20 + 1.50 + 1.40 + 1.35 = 7.45; Alt2 = 6(0.40) + 9(0.25) + 8(0.20) + 7(0.15) = 2.40 + 2.25 + 1.60 + 1.05 = 7.30; Alt3 = 9(0.40) + 5(0.25) + 6(0.20) + 6(0.15) = 3.60 + 1.25 + 1.20 + 0.90 = 6.95। তাই Alt1 সর্বোচ্চ স্কোর (7.45) নিয়ে বিজয়ী হয় — যদিও Alt3-এর কস্ট-এফিশিয়েন্সি স্কোর সবচেয়ে বেশি (৯), তার নির্ভরযোগ্যতা স্কোর কম (৫) হওয়ায় সামগ্রিক ওয়েটেড স্কোরে পিছিয়ে যায়।
সাবজেক্টিভিটি ঝুঁকি — একটি গুরুত্বপূর্ণ সীমাবদ্ধতা

এই কোর্সের বাকি সব হিসাব (PW, AW, IRR, ডেপ্রিসিয়েশন) সম্পূর্ণ বস্তুনিষ্ঠ — একই ইনপুট দিলে সবসময় একই সংখ্যাগত উত্তর আসে। কিন্তু ওয়েটেড-স্কোরিং পদ্ধতিতে ওজন ও স্কোর দুটোই বিচার-ভিত্তিক সিদ্ধান্ত — ভিন্ন মূল্যায়নকারী ভিন্ন ওজন বা স্কোর দিলে সম্পূর্ণ ভিন্ন বিজয়ী বেরিয়ে আসতে পারে। তাই এই পদ্ধতিকে "চূড়ান্ত সত্য" হিসেবে না দেখে, একটি কাঠামোবদ্ধ সিদ্ধান্ত-সহায়ক টুল হিসেবে দেখা উচিত — যেখানে ওজন ও স্কোর নির্ধারণের যুক্তি স্বচ্ছভাবে নথিভুক্ত (documented) রাখা জরুরি।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ Alt3-এর কস্ট-এফিশিয়েন্সি স্কোর সবচেয়ে বেশি হওয়া সত্ত্বেও কেন সে বিজয়ী হলো না?

কারণ চূড়ান্ত সিদ্ধান্ত একক ক্রাইটেরিয়ার উপর নয়, সবগুলো ক্রাইটেরিয়ার ওজনযুক্ত সমষ্টির উপর নির্ভর করে। Alt3-এর কস্ট-এফিশিয়েন্সি স্কোর (৯) সর্বোচ্চ হলেও তার নির্ভরযোগ্যতা (৫) তুলনামূলক কম, আর নির্ভরযোগ্যতার ওজনও (০.২৫) যথেষ্ট বড়, ফলে সামগ্রিক weighted total-এ Alt3 পিছিয়ে পড়ে।

প্র ০২ যদি cost_efficiency-এর ওজন ০.৪০ থেকে বাড়িয়ে ০.৭০ করা হয় (আর বাকি তিনটির ওজন সমানুপাতে কমানো হয়), তাহলে বিজয়ী বদলে যেতে পারে কি?

হ্যাঁ, সম্ভবত বদলে যাবে — কারণ cost_efficiency-তে Alt3-এর স্কোর (৯) সবচেয়ে বেশি, তাই এই ক্রাইটেরিয়ার ওজন যথেষ্ট বাড়ালে Alt3-এর weighted total Alt1-কে ছাড়িয়ে যেতে পারে। এটাই দেখায় ওয়েটেড-স্কোরিং পদ্ধতির ফলাফল ওজনের উপর কতটা সংবেদনশীল (sensitive) — তাই ওজন নির্ধারণের যুক্তি স্বচ্ছ ও যাচাইযোগ্য হওয়া জরুরি।

প্র ০৩ উপরের কোডে assert abs(sum(weights.values()) - 1.0) < 1e-9 লাইনটি কেন রাখা হয়েছে?

এটি একটি সেলফ-ভেরিফিকেশন চেক — যদি কেউ ভুলবশত এমন ওজন দেয় যেগুলো ১.০-তে যোগ হয় না (যেমন ভুলে একটি ক্রাইটেরিয়া বাদ পড়ে গেছে, বা ওজন ভুল বসানো হয়েছে), তাহলে weighted_score() একটি ভুল, বিভ্রান্তিকর সংখ্যা চুপচাপ ফেরত দেওয়ার বদলে সাথে সাথে একটি স্পষ্ট এরর তুলে ধরবে।

অনুশীলন

  1. চিন্তা করুন: একটি হাসপাতাল দুটো MRI মেশিনের মধ্যে বাছাই করছে, যেখানে একটির দাম কম কিন্তু নির্ভরযোগ্যতা কম, অন্যটির দাম বেশি কিন্তু নির্ভরযোগ্যতা বেশি। এই সিদ্ধান্তে কেন শুধু PW/AW-ভিত্তিক তুলনা যথেষ্ট নাও হতে পারে?

    হাসপাতালের প্রেক্ষাপটে নির্ভরযোগ্যতা সরাসরি রোগীর নিরাপত্তা ও সেবার ধারাবাহিকতার সাথে জড়িত — একটি মেশিন ঘন ঘন বিকল হলে শুধু মেরামতের খরচ নয়, বরং রোগীর জীবন ঝুঁকিতে পড়া বা জরুরি সেবা ব্যাহত হওয়ার মতো পরিণতি হতে পারে, যা সরাসরি ডলারে পরিমাপ করা কঠিন। তাই এখানে ওয়েটেড-স্কোরিং পদ্ধতির মতো একটি MADM কাঠামো প্রয়োজন, যেখানে নির্ভরযোগ্যতাকে যথেষ্ট গুরুত্ব (ওজন) দেওয়া যায়।

  2. পরীক্ষা করুন: উপরের কোড সেলে Alt2-এর স্কোর [6, 9, 8, 7]-কে [6, 10, 10, 10]-এ বদলে Run চেপে দেখুন বিজয়ী বদলায় কি না।

    নতুন Alt2 স্কোর = 6(0.40) + 10(0.25) + 10(0.20) + 10(0.15) = 2.40 + 2.50 + 2.00 + 1.50 = 8.40, যা Alt1-এর 7.45-এর চেয়ে বেশি — তাই বিজয়ী Alt1 থেকে Alt2-তে বদলে যাবে। এটা দেখায় শুধু কস্ট-এফিশিয়েন্সিতে কম নম্বর পেলেও অন্য তিনটি ক্রাইটেরিয়ায় যথেষ্ট বেশি স্কোর করলে একটি বিকল্প সামগ্রিকভাবে এগিয়ে যেতে পারে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
  • পরের পাঠ L55 বাস্তবে ইঞ্জিনিয়ারিং ইকোনমিক্স — কেস স্টাডি — এই কোর্সের পদ্ধতিগুলো বাস্তব প্রেক্ষাপটে একসাথে প্রয়োগ করার শুরু।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation ও Engineering Economics — সব এক জায়গায়।
আগের পাঠ
ক্যাপিটাল বাজেটিং ও ক্যাপিটাল র‍্যাশনিং