পাঠ ৪২ · ৫৭-এর মধ্যে · মডিউল ৯
Home / Courses / Numerical Methods / অপ্টিমাইজেশন

আনকনস্ট্রেইনড অপ্টিমাইজেশন — গোল্ডেন সেকশন সার্চ

Unconstrained optimization — golden section search
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

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

  • আনকনস্ট্রেইনড অপ্টিমাইজেশন সমস্যাটি ঠিক কী, এবং কেন এটি রুট-ফাইন্ডিং সমস্যার সাথে ঘনিষ্ঠভাবে সম্পর্কিত
  • গোল্ডেন সেকশন সার্চ কীভাবে কাজ করে, এবং "গোল্ডেন রেশিও" ঠিক কোথায় ব্যবহৃত হয়
  • কেন এই মেথড শুধু ইউনিমোডাল (একটিমাত্র মিনিমামযুক্ত) ফাংশনে নির্ভরযোগ্য
  • একটি সত্যিকারের, চলমান ডেমো — f(x) = (x-3)² + 1-এর মিনিমাম বের করা, এবং প্রতি ধাপে ইন্টারভাল সংকোচনের হার পর্যবেক্ষণ করা

১ · আনকনস্ট্রেইনড অপ্টিমাইজেশন সমস্যা

আনকনস্ট্রেইনড অপ্টিমাইজেশনUnconstrained optimizationএমন একটি সমস্যা যেখানে একটি ফাংশন f(x)-এর মিনিমাম বা ম্যাক্সিমাম খুঁজে বের করতে হয়, ইনপুট x-এর উপর কোনো অতিরিক্ত সীমাবদ্ধতা (constraint) ছাড়াই। হলো — একটি ফাংশন f(x) দেওয়া থাকলে, এমন x খুঁজে বের করা যেখানে f(x) সর্বনিম্ন (বা সর্বোচ্চ) হয়, এবং x-এর উপর কোনো অতিরিক্ত শর্ত নেই (যেমন "x ≥ 0" বা "x + y = 10" — এগুলো L45-এর কনস্ট্রেইনড কেস)। ক্যালকুলাসে আমরা শিখি f'(x) = 0 সমাধান করে ক্রিটিক্যাল পয়েন্ট বের করতে হয় — কিন্তু M2-এর মতোই, বেশিরভাগ বাস্তব ফাংশনের জন্য f'(x) = 0-এর কোনো ক্লোজড-ফর্ম সমাধান নেই। তাই আমরা M2-এর মতোই ইটারেটিভ নিউমেরিক্যাল মেথড ব্যবহার করি — পার্থক্য শুধু এই যে এখানে আমরা f(x) = 0 খুঁজছি না, বরং f(x)-এর সবচেয়ে ছোট মান কোথায় তা খুঁজছি।

ইউনিমোডাল ফাংশন
গোল্ডেন সেকশন সার্চ কাজ করে শুধু ইউনিমোডাল ফাংশনে — অর্থাৎ একটি নির্দিষ্ট ইন্টারভালে ফাংশনটির ঠিক একটিমাত্র মিনিমাম (বা ম্যাক্সিমাম) আছে, একাধিক "স্থানীয় গর্ত" নেই।
ডেরিভেটিভ-মুক্ত মেথড
শুধু f(x)-এর মান তুলনা করেই কাজ চলে — f'(x) জানার বা গণনা করার প্রয়োজন নেই, যা এমন ফাংশনের জন্য উপকারী যেগুলোর ডেরিভেটিভ জটিল বা অজানা।
গোল্ডেন রেশিও
প্রতি ধাপে ইন্টারভালের মধ্যে দুটি টেস্ট-পয়েন্ট বসানো হয় গোল্ডেন রেশিও φ ≈ 0.618 অনুপাতে — এই বিশেষ অনুপাত ব্যবহারের ফলে প্রতি ধাপে নতুন একটি মাত্র ফাংশন-মূল্যায়ন যথেষ্ট হয় (আগের ধাপের একটি পয়েন্ট পুনঃব্যবহার করা যায়)।
সহোদর পাঠের সাথে সম্পর্ক

M8/L41-এ আমরা আইগেনভ্যালু মেথড দিয়ে ভাইব্রেশন, স্ট্যাবিলিটি ও PCA-এর সংযোগ দেখেছিলাম — এখন M9-এ আমরা একটি ভিন্ন কিন্তু সমান গুরুত্বপূর্ণ প্রশ্নে যাচ্ছি: একটি ফাংশনের "সবচেয়ে ভালো" ইনপুট কীভাবে বের করা যায়। Math for AI & ML কোর্স ডেরিভেটিভ ও গ্র্যাডিয়েন্ট কী তা শেখায় — এই পাঠে আমরা ধরে নিচ্ছি সেই ধারণা আছে, কিন্তু দেখাচ্ছি কীভাবে ডেরিভেটিভ ছাড়াই একটি মিনিমাম নিউমেরিক্যালি বের করা যায়।

২ · গোল্ডেন সেকশন সার্চ কীভাবে কাজ করে

একটি ইন্টারভাল [a, b] দিয়ে শুরু করি যেখানে আমরা জানি মিনিমাম আছে। এই ইন্টারভালের ভেতরে দুটি টেস্ট-পয়েন্ট c ও d বসানো হয় গোল্ডেন রেশিওর ভিত্তিতে:

$$ c = b - \varphi (b - a), \qquad d = a + \varphi (b - a), \qquad \varphi = \frac{\sqrt{5}-1}{2} \approx 0.618 $$

এরপর f(c) ও f(d) তুলনা করা হয়: যদি f(c) < f(d) হয়, তাহলে মিনিমামটি অবশ্যই [a, d]-এর মধ্যে আছে (তাই b-কে d-তে সরিয়ে আনা হয়); নয়তো মিনিমামটি [c, b]-এর মধ্যে আছে (তাই a-কে c-তে সরিয়ে আনা হয়)। গোল্ডেন রেশিওর বিশেষ গণিতীয় বৈশিষ্ট্যের কারণে, নতুন ইন্টারভালের একটি টেস্ট-পয়েন্ট আগের ধাপের একটি টেস্ট-পয়েন্টের সাথে মিলে যায় — তাই প্রতি ধাপে মাত্র একটি নতুন ফাংশন-মূল্যায়ন প্রয়োজন হয়।

Python
import math

def f(x):
    return (x - 3)**2 + 1

def golden_section_search(f, a, b, tol=1e-5, max_iter=100):
    gr = (math.sqrt(5) - 1) / 2   # golden ratio ~ 0.618
    c = b - gr * (b - a)
    d = a + gr * (b - a)
    fc, fd = f(c), f(d)

    for i in range(1, max_iter + 1):
        mid = (a + b) / 2
        width = b - a
        print(f"ইটারেশন {i:2d}: a={a:.6f}  b={b:.6f}  মধ্যবিন্দু={mid:.6f}  প্রস্থ={width:.8f}")
        if width < tol:
            break
        if fc < fd:
            b, d, fd = d, c, fc
            c = b - gr * (b - a)
            fc = f(c)
        else:
            a, c, fc = c, d, fd
            d = a + gr * (b - a)
            fd = f(d)
    return (a + b) / 2, i

final_x, n_iter = golden_section_search(f, 0.0, 5.0)
print()
print(f"চূড়ান্ত আনুমানিক মিনিমাম x = {final_x:.6f}  (প্রকৃত মিনিমাম x = 3)")
print(f"f(final_x) = {f(final_x):.8f}  (প্রকৃত মিনিমাম মান = 1)")
print(f"মোট ইটারেশন = {n_iter},  এরর = {abs(final_x - 3):.8f}")

    
শুরু ইন্টারভাল [0, 5] থেকে, টলারেন্স tol = 1e-5-এ পৌঁছাতে এই মেথডের লাগে ২৯টি ইটারেশন — এবং চূড়ান্ত আনুমানিক মিনিমাম হয় x ≈ 2.999998, প্রকৃত মিনিমাম x = 3-এর তুলনায় এরর মাত্র ০.০০০০০১৯১। প্রতিটি ইটারেশনে ইন্টারভাল প্রস্থ একটি স্থির হারে (φ ≈ 0.618) সংকুচিত হয় — বাইসেকশনের মতোই লিনিয়ার কনভারজেন্স, তবে সংকোচনের হার বাইসেকশনের ০.৫-এর চেয়ে কিছুটা ধীর (০.৬১৮), যার বিনিময়ে ডেরিভেটিভ ছাড়াই কাজ করার সুবিধা মেলে।
মূল কথা · Key takeaway

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

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

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

প্র ০১ গোল্ডেন সেকশন সার্চ ইউনিমোডাল ফাংশনে নির্ভরযোগ্য — কিন্তু যদি ফাংশনটির দুটি আলাদা স্থানীয় মিনিমাম থাকে (যেমন একটি "W" আকৃতির ফাংশন), তাহলে কী সমস্যা হতে পারে?

মেথডটি শুধু f(c) ও f(d)-এর মান তুলনা করে সিদ্ধান্ত নেয় কোন দিকে মিনিমাম আছে — যদি দুটি আলাদা মিনিমাম থাকে, এই তুলনা ভুল দিকে সংকেত দিতে পারে, এবং মেথডটি একটি ভুল (স্থানীয়) মিনিমামে কনভার্জ করতে পারে, অথবা প্রকৃত গ্লোবাল মিনিমামটি সম্পূর্ণ মিস করতে পারে — কোনো সতর্কবার্তা ছাড়াই।

প্র ০২ বাইসেকশন মেথড (L05) প্রতি ধাপে ইন্টারভাল ঠিক অর্ধেক (০.৫ গুণ) করে, কিন্তু গোল্ডেন সেকশন সার্চ প্রতি ধাপে ইন্টারভাল ০.৬১৮ গুণ করে — তাহলে কেন গোল্ডেন সেকশন সার্চ ব্যবহার করা হয়, শুধু ইন্টারভালকে সরাসরি অর্ধেক করে দুই পাশের মান তুলনা করলেই তো চলত?

অপ্টিমাইজেশনে বাইসেকশনের মতো "চিহ্ন" (sign) তুলনা করার সুযোগ নেই — শুধু দুটি বিন্দুর ফাংশন-মান তুলনা করে বলা যায় কোন দিকে মিনিমাম থাকতে পারে, নিশ্চিতভাবে বলা যায় না, যদি না ইন্টারভালের মধ্যে নির্দিষ্ট গাণিতিক সম্পর্ক (গোল্ডেন রেশিও) বজায় রাখা হয় যাতে আগের ধাপের একটি টেস্ট-পয়েন্ট পুনঃব্যবহারযোগ্য থাকে — এই বিশেষ অনুপাতটিই নিশ্চিত করে প্রতি ধাপে মাত্র একটি নতুন ফাংশন-মূল্যায়ন প্রয়োজন হয়, যা গণনা-খরচ কমায়।

প্র ০৩ গোল্ডেন সেকশন সার্চ শুধু 1D ফাংশনে (একটি মাত্র চলক x) কাজ করে। বাস্তব-বিশ্বের মেশিন লার্নিং মডেলে প্রায়ই হাজার হাজার প্যারামিটার (চলক) থাকে — এমন পরিস্থিতিতে গোল্ডেন সেকশন সার্চের মতো মেথড কেন ব্যবহারযোগ্য নয় বলে আপনার মনে হয়?

গোল্ডেন সেকশন সার্চের ইন্টারভাল-সংকোচন কৌশলটি মূলত এক-মাত্রিক — একাধিক চলকের ক্ষেত্রে "ইন্টারভাল" ধারণাটি সরাসরি সম্প্রসারণযোগ্য নয় (এটি একটি বহুমাত্রিক অঞ্চল হয়ে যায়, যেখানে এই দ্বি-বিন্দু তুলনার কৌশল কাজ করে না)। এই কারণেই M43-এ আমরা গ্র্যাডিয়েন্ট ডিসেন্ট শিখব, যা সরাসরি বহু-চলক ফাংশনে প্রসারিত হয়, কারণ এটি প্রতিটি চলকের দিকনির্দেশনা (গ্র্যাডিয়েন্ট) ব্যবহার করে।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে শুরুর ইন্টারভাল [0, 5]-এর বদলে [2, 10] ব্যবহার করলে (একই টলারেন্স 1e-5-এ) ইটারেশন সংখ্যা কি বাড়বে, কমবে, নাকি প্রায় একই থাকবে বলে আপনার ধারণা?

    ইটারেশন সংখ্যা মূলত শুরুর ইন্টারভাল প্রস্থের উপর নির্ভর করে (প্রতি ধাপে প্রস্থ φ ≈ ০.৬১৮ গুণ সংকুচিত হয়) — [2, 10]-এর প্রস্থ ৮, যা [0, 5]-এর প্রস্থ ৫-এর চেয়ে বড়, তাই একই টলারেন্সে পৌঁছাতে সামান্য বেশি ইটারেশন লাগার কথা।

  2. পরীক্ষা করুন: উপরের কোড সেলে golden_section_search(f, 0.0, 5.0)-কে golden_section_search(f, 2.0, 10.0)-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।

    [2, 10]-এ শুরু করলে ইটারেশন সংখ্যা 29 থেকে বেড়ে 31-এ দাঁড়ায় (প্রস্থ ৮/৫ = ১.৬ গুণ বড় হওয়ায় লগারিদমিক স্কেলে সামান্য বেশি ধাপ প্রয়োজন), কিন্তু চূড়ান্ত মিনিমাম x ≈ 3.000000-এর কাছেই থাকে — শুরুর ইন্টারভাল যতই বড় হোক, গোল্ডেন সেকশন সার্চ নির্ভরযোগ্যভাবে একই মিনিমামে পৌঁছায়, শুধু ইটারেশন সংখ্যা লগারিদমিকভাবে বাড়ে।

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

আগের পাঠ
প্রয়োগ — ভাইব্রেশন, স্ট্যাবিলিটি ও PCA-এর সংযোগ