পাঠ ২৪ · ৫৭-এর মধ্যে · মডিউল ৫
Home / Courses / Engineering Economics / PW/AW/ROR বাছাই

PW, AW ও ROR পদ্ধতির মধ্যে বাছাই

Choosing among PW, AW & ROR methods
১০ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • PW/FW/AW পদ্ধতি কখন সবচেয়ে সহজ ও সরাসরি — এবং কেন এগুলো সবসময় সামঞ্জস্যপূর্ণ সিদ্ধান্ত দেয়
  • IRR/ROR পদ্ধতি কখন সুবিধাজনক (সহজবোধ্যতা), এবং কখন ঝুঁকিপূর্ণ (র‌্যাংকিং, একাধিক-মূল)
  • একই ডেটাসেটে তিনটি পদ্ধতি একসাথে গণনা করে তুলনা করার ব্যবহারিক অভ্যাস
  • Python-এ PW ও AW র‌্যাংকিংয়ের মিল কোডের মাধ্যমেই প্রত্যক্ষভাবে যাচাই করা

১ · কোন পদ্ধতি কখন সুবিধাজনক

PW / FW (M4)
যখন প্রজেক্টের মোট আর্থিক মূল্য একটি একক সংখ্যায় দেখানো জরুরি — বাজেট অনুমোদন, বিনিয়োগ তুলনায় সবচেয়ে সরাসরি।
AW (M4)
যখন ফলাফল "বার্ষিক" ভাষায় দরকার (যেমন বার্ষিক বাজেট প্রতিবেদন), অথবা জীবনকাল ভিন্ন হলে (AW-রিপিটেবিলিটি ধরে সরাসরি তুলনা)।
IRR/ROR (M5)
যখন ফলাফল একটি % হিসেবে যোগাযোগ করা সহজ — বিশেষত অ-আর্থিক বিশেষজ্ঞ স্টেকহোল্ডারদের কাছে — তবে ranking-এ সতর্কতা দরকার।

PW, FW ও AW একে অপরের গাণিতিক রূপান্তর মাত্র (M4-এ দেখানো হয়েছে) — তাই তিনটির যেকোনো একটি দিয়ে সঠিকভাবে অল্টারনেটিভ তুলনা করলে সবসময় একই গ্রহণ/প্রত্যাখ্যান ও একই র‌্যাংকিং সিদ্ধান্ত আসবে (শর্ত — সমান জীবনকাল, অথবা M4-এর অসম-জীবনকাল কৌশল সঠিকভাবে প্রয়োগ করা হলে)। IRR ভিন্ন — এটি একটি % হওয়ায় স্বজ্ঞাগতভাবে আকর্ষণীয়, কিন্তু র‌্যাংকিংয়ে নির্ভরযোগ্য হতে ইনক্রিমেন্টাল অ্যানালাইসিস (L22) বাধ্যতামূলক — শুধু গ্রহণ/প্রত্যাখ্যান সিদ্ধান্তে (একক প্রজেক্ট, IRR vs MARR) এটি সরাসরি নির্ভরযোগ্য।

২ · Python-এ তিনটি পদ্ধতি একসাথে — একটি তুলনা

তিনটি সরঞ্জাম বিকল্প X, Y, Z — প্রতিটির জীবনকাল ৫ বছর, MARR = ১০% —

  • X: খরচ $15,000, বার্ষিক সুবিধা $4,500
  • Y: খরচ $20,000, বার্ষিক সুবিধা $5,800
  • Z: খরচ $25,000, বার্ষিক সুবিধা $7,000

নিচের কোডে প্রতিটির PW (M4-এর P/A ফ্যাক্টর দিয়ে), AW (PW থেকে A/P ফ্যাক্টর দিয়ে), ও IRR (L20-এর বাইসেকশন দিয়ে) একসাথে গণনা করে একটি তুলনা টেবিল প্রিন্ট করা হয়েছে, তারপর PW ও AW র‌্যাংকিং একই কি না তা সরাসরি কোডে যাচাই করা হয়েছে।

Python
# PW, AW ও IRR একসাথে গণনা -- তিনটি অল্টারনেটিভের তুলনা

def pw_factor(i, n):
    return ((1 + i) ** n - 1) / (i * (1 + i) ** n)

def ap_factor(i, n):
    return (i * (1 + i) ** n) / ((1 + i) ** n - 1)

def npv(cashflows, i):
    return sum(cf / (1 + i) ** t for t, cf in cashflows)

def find_irr(cashflows, lo=-0.5, hi=1.0, tol=1e-7, max_iter=200):
    f_lo = npv(cashflows, lo)
    f_hi = npv(cashflows, hi)
    if f_lo * f_hi > 0:
        raise ValueError("bracket-এ NPV চিহ্ন বদলাচ্ছে না")
    for _ in range(max_iter):
        mid = (lo + hi) / 2
        f_mid = npv(cashflows, mid)
        if abs(f_mid) < tol or (hi - lo) / 2 < tol:
            return mid
        if f_lo * f_mid < 0:
            hi = mid
        else:
            lo = mid
            f_lo = f_mid
    return (lo + hi) / 2

MARR = 0.10
n = 5

alternatives = {
    "X": {"cost": 15000, "benefit": 4500},
    "Y": {"cost": 20000, "benefit": 5800},
    "Z": {"cost": 25000, "benefit": 7000},
}

results = {}
for name, alt in alternatives.items():
    cost, benefit = alt["cost"], alt["benefit"]
    pw = -cost + benefit * pw_factor(MARR, n)
    aw = pw * ap_factor(MARR, n)
    cashflows = [(0, -cost)] + [(t, benefit) for t in range(1, n + 1)]
    irr = find_irr(cashflows)
    results[name] = {"pw": pw, "aw": aw, "irr": irr}
    print(f"Alt {name}: cost=${cost:,.0f}, benefit=${benefit:,.0f}/yr  ->  "
          f"PW=${pw:,.2f}   AW=${aw:,.2f}   IRR={irr*100:.2f}%")

pw_rank = sorted(results, key=lambda k: results[k]["pw"], reverse=True)
aw_rank = sorted(results, key=lambda k: results[k]["aw"], reverse=True)
irr_rank = sorted(results, key=lambda k: results[k]["irr"], reverse=True)

print()
print(f"PW র‌্যাংকিং (বেশি থেকে কম): {pw_rank}")
print(f"AW র‌্যাংকিং (বেশি থেকে কম): {aw_rank}")
print(f"IRR র‌্যাংকিং (বেশি থেকে কম): {irr_rank}")
print(f"PW ও AW র‌্যাংকিং একই কি না: {pw_rank == aw_rank}")

    
কোড চালালে দেখা যাবে pw_rank == aw_rank সবসময় True — এটি কাকতালীয় নয়, বরং গাণিতিক নিশ্চয়তা, কারণ aw = pw * ap_factor(MARR, n) সমান জীবনকালের সব অল্টারনেটিভের জন্য একই ধনাত্মক সংখ্যা দিয়ে গুণ করে, যা কখনো র‌্যাংকিং উল্টে দিতে পারে না। এই উদাহরণে irr_rank-ও কাকতালীয়ভাবে একই ক্রমে আসে — কিন্তু এটি কোডে assert করা হয়নি, কারণ এটি সাধারণভাবে সত্যি নয়: ভিন্ন খরচ/সুবিধা অনুপাতের অল্টারনেটিভে IRR র‌্যাংকিং PW/AW র‌্যাংকিং থেকে সহজেই আলাদা হয়ে যেতে পারে (L22-এর উদাহরণ দ্রষ্টব্য) — তাই র‌্যাংকিংয়ে IRR ব্যবহার করতে হলে সবসময় ইনক্রিমেন্টাল অ্যানালাইসিস দিয়ে নিশ্চিত করা প্রয়োজন।
মূল কথা · Key takeaway

সমান জীবনকালের অল্টারনেটিভ তুলনায় PW ও AW সবসময় একমত হয় — তাই যেকোনো একটি সরাসরি ব্যবহার করা নিরাপদ। IRR তার সহজবোধ্য % ফরম্যাটের কারণে জনপ্রিয়, কিন্তু গ্রহণ/প্রত্যাখ্যান সিদ্ধান্তের বাইরে গিয়ে একাধিক অল্টারনেটিভ র‌্যাংক করতে হলে সবসময় ইনক্রিমেন্টাল অ্যানালাইসিস (L22) প্রয়োজন, আর নন-কনভেনশনাল ক্যাশ ফ্লোতে ERR/MIRR (L23) বিবেচনা করতে হয়। এই পাঠের মাধ্যমে মডিউল ৫ শেষ হলো — এরপর M6-এ বেনিফিট-কস্ট অ্যানালাইসিস দিয়ে পাবলিক-সেক্টর প্রজেক্ট মূল্যায়নে যাওয়া হবে।

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

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

প্র ০১ PW ও AW র‌্যাংকিং সমান জীবনকালে কখনো আলাদা হতে পারে না কেন — এটা গাণিতিকভাবে ব্যাখ্যা করুন।

কারণ $AW = PW \times (A/P\text{ factor})$, আর একটি নির্দিষ্ট $MARR$ ও $n$-এর জন্য A/P ফ্যাক্টর সব অল্টারনেটিভের জন্য একই ধনাত্মক ধ্রুবক। একটি তালিকার প্রতিটি সংখ্যাকে একই ধনাত্মক সংখ্যা দিয়ে গুণ করলে তাদের আপেক্ষিক ক্রম কখনো বদলায় না — তাই PW বেশি হলে AW-ও বেশি হবে, ক্রম অপরিবর্তিত থাকবে।

প্র ০২ যদি তিনটি অল্টারনেটিভের জীবনকাল ভিন্ন হতো (যেমন X=৫ বছর, Y=৭ বছর, Z=১০ বছর), তাহলে উপরের কোড সরাসরি ব্যবহার করা যেত কি?

না, সরাসরি নয় — PW তুলনা করতে হলে L19-এর কৌশল (LCM জীবনকাল বা স্টাডি পিরিয়ড) প্রয়োগ করতে হতো, অথবা AW ব্যবহার করলে "রিপিটেবিলিটি" অনুমান (প্রতিটি অল্টারনেটিভ নিজের জীবনকাল শেষে অভিন্নভাবে পুনরাবৃত্তি হয়) ধরে সরাসরি তুলনা করা যেত। এটাই AW-এর একটি বাস্তব সুবিধা — অসম জীবনকালেও LCM ছাড়াই তুলনা করা যায়।

প্র ০৩ কেন কোডে irr_rank == pw_rank assert করা হয়নি, যদিও এই নির্দিষ্ট উদাহরণে তারা মিলে গেছে?

কারণ এটি একটি গাণিতিক নিশ্চয়তা নয়, শুধু এই নির্দিষ্ট সংখ্যায় একটি কাকতালীয় মিল — সাধারণভাবে IRR র‌্যাংকিং PW/AW র‌্যাংকিং থেকে আলাদা হয়ে যেতে পারে (L22-এ দেখা গেছে কীভাবে)। মিথ্যা assert লেখা এই কোর্সের নীতির বিরোধী — কোড শুধু সেই সম্পর্কগুলোই assert করে যা সবসময় সত্যি (যেমন PW==AW র‌্যাংকিং), অনুমানভিত্তিক মিল নয়।

অনুশীলন

  1. চিন্তা করুন: একজন নন-টেকনিক্যাল ম্যানেজারের কাছে একটি প্রজেক্টের ফলাফল উপস্থাপন করতে হলে PW ($) ও IRR (%) — কোনটি বেশি কার্যকর হতে পারে, এবং কেন?

    IRR (%) প্রায়ই বেশি সহজবোধ্য মনে হয়, কারণ এটি একটি একক, তুলনাযোগ্য সংখ্যা যা সরাসরি "কতটা ভালো রিটার্ন" বোঝায় — ব্যাংক সুদের হারের সাথে তুলনা করা সহজ। কিন্তু PW ($) প্রজেক্টের প্রকৃত মূল্য-তৈরির পরিমাণ (স্কেল) বোঝায়, যা বাজেট সিদ্ধান্তে গুরুত্বপূর্ণ — তাই বাস্তবে দুটোই একসাথে উপস্থাপন করাই সবচেয়ে কার্যকর।

  2. পরীক্ষা করুন: উপরের কোড সেলে Alt Z-এর benefit-কে 7000 থেকে 9000-এ বদলে Run চেপে দেখুন IRR র‌্যাংকিং PW/AW র‌্যাংকিং থেকে আলাদা হয়ে যায় কি না।

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

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

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
  • Discrete Mathematics কোর্স সহোদর কোর্স সিকোয়েন্স ও সিরিজের সমষ্টির সূত্র — এই মডিউলের প্রতিটি PW/AW/IRR হিসাবের গাণিতিক ভিত্তি সেখানেই তৈরি হয়েছে।
  • সব 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 — সব এক জায়গায়।
আগের পাঠ
এক্সটার্নাল রেট অফ রিটার্ন (ERR/MIRR)