কনস্ট্রেইনড অপ্টিমাইজেশন — লাগ্রাঞ্জ মাল্টিপ্লায়ার
এই পাঠে যা শিখবেন
- কনস্ট্রেইনড অপ্টিমাইজেশন সমস্যা কী, এবং কেন আনকনস্ট্রেইনড মেথড সরাসরি প্রয়োগ করা যায় না
- লাগ্রাঞ্জিয়ান ফাংশন কীভাবে তৈরি হয়, এবং লাগ্রাঞ্জ মাল্টিপ্লায়ার
λকী বোঝায় - একটি সত্যিকারের, হাতে-সমাধান করা উদাহরণ — সমীকরণের সিস্টেম সেট আপ করে গসিয়ান এলিমিনেশন দিয়ে সমাধান
- সমাধানে কনস্ট্রেইন্ট সত্যিই সন্তুষ্ট হয়েছে কিনা তা যাচাই করা
১ · কনস্ট্রেইনড অপ্টিমাইজেশন সমস্যা
মনে করুন আমরা f(x, y)-এর মিনিমাম খুঁজছি, কিন্তু (x, y)-কে অবশ্যই একটি
শর্ত g(x, y) = 0 মেনে চলতে হবে (যেমন x + y = 6, যা
g(x,y) = x + y - 6 = 0 আকারে লেখা যায়)। সরাসরি ∇f = 0 সমাধান করলে যে বিন্দু
পাওয়া যাবে তা হয়তো কনস্ট্রেইন্ট মানবে না — আমাদের এমন বিন্দু চাই যা কনস্ট্রেইন্ট-এর "উপর থেকে"
f-কে যতটা সম্ভব ছোট করে।
f-এর আনকনস্ট্রেইনড মিনিমাম প্রায়ই কনস্ট্রেইন্ট-এর বাইরে পড়ে যায় — আমাদের কনস্ট্রেইন্ট-এর "উপরিতল" বরাবর সবচেয়ে ছোট মান খুঁজতে হয়।মিনিমাম বিন্দুতে
f-এর গ্র্যাডিয়েন্ট এবং g-এর গ্র্যাডিয়েন্ট সমান্তরাল (parallel) হতে হবে — অর্থাৎ ∇f = λ∇g কোনো ধ্রুবক λ-এর জন্য।একটি সহায়ক ফাংশন
L(x,y,λ) = f(x,y) - λ·g(x,y) তৈরি করে, এর তিনটি আংশিক ডেরিভেটিভ শূন্যে বসিয়ে একটি সমীকরণ-সিস্টেম পাওয়া যায়।২ · লাগ্রাঞ্জিয়ান সেট আপ করা
টেস্ট সমস্যা: f(x,y) = (x-1)² + (y-2)²-কে মিনিমাইজ করো, শর্ত
g(x,y) = x + y - 6 = 0-এর অধীনে। লাগ্রাঞ্জিয়ান:
$$ L(x, y, \lambda) = (x-1)^2 + (y-2)^2 - \lambda (x + y - 6) $$
তিনটি আংশিক ডেরিভেটিভ শূন্যে বসিয়ে (KKT শর্ত):
$$ \frac{\partial L}{\partial x} = 2(x-1) - \lambda = 0, \qquad \frac{\partial L}{\partial y} = 2(y-2) - \lambda = 0, \qquad \frac{\partial L}{\partial \lambda} = -(x+y-6) = 0 $$
এই তিনটি সমীকরণ পুনর্বিন্যাস করে একটি 3×3 লিনিয়ার সিস্টেম পাওয়া যায় —
2x - λ = 2, 2y - λ = 4, এবং x + y = 6 — যা M3/L10-এর গসিয়ান
এলিমিনেশন দিয়ে সরাসরি সমাধানযোগ্য।
def gaussian_elimination(A, b):
n = len(A)
M = [row[:] + [b[i]] for i, row in enumerate(A)]
for col in range(n):
pivot_row = max(range(col, n), key=lambda r: abs(M[r][col]))
M[col], M[pivot_row] = M[pivot_row], M[col]
pivot = M[col][col]
for r in range(col + 1, n):
factor = M[r][col] / pivot
for c in range(col, n + 1):
M[r][c] -= factor * M[col][c]
x = [0.0] * n
for i in range(n - 1, -1, -1):
s = M[i][n] - sum(M[i][j] * x[j] for j in range(i + 1, n))
x[i] = s / M[i][i]
return x
# minimize f(x,y) = (x-1)^2 + (y-2)^2 subject to g(x,y) = x + y - 6 = 0
# KKT system: 2x - lambda = 2 ; 2y - lambda = 4 ; x + y = 6
A = [
[2, 0, -1],
[0, 2, -1],
[1, 1, 0],
]
b = [2, 4, 6]
x, y, lam = gaussian_elimination(A, b)
print(f"x = {x:.6f}, y = {y:.6f}, lambda = {lam:.6f}")
def f(x, y):
return (x - 1)**2 + (y - 2)**2
print(f"f(x, y) = {f(x, y):.6f}")
constraint_value = x + y - 6
print(f"কনস্ট্রেইন্ট চেক: x + y - 6 = {constraint_value:.10f} (শূন্যের কাছাকাছি হওয়া উচিত)")
r1 = 2*x - lam - 2
r2 = 2*y - lam - 4
r3 = x + y - 6
print(f"রেসিডুয়াল চেক: r1={r1:.2e}, r2={r2:.2e}, r3={r3:.2e}")
x = 2.500000, y = 3.500000, λ = 3.000000, এবং f(x, y) = 4.500000।
কনস্ট্রেইন্ট চেক দেখায় x + y - 6 = 0.0000000000 — নিখুঁতভাবে সন্তুষ্ট। লক্ষ্য করুন,
f-এর আনকনস্ট্রেইনড মিনিমাম হতো (1, 2)-এ (যেখানে f = 0),
কিন্তু কনস্ট্রেইন্ট x + y = 6 সেই বিন্দুকে অনুমতি দেয় না — তাই লাগ্রাঞ্জ মাল্টিপ্লায়ার
মেথড একটি ভিন্ন, কনস্ট্রেইন্ট-সন্তোষজনক বিন্দু (2.5, 3.5) খুঁজে বের করেছে, যেখানে
f কনস্ট্রেইন্ট রেখা বরাবর সবচেয়ে ছোট।
লাগ্রাঞ্জ মাল্টিপ্লায়ার λ = 3-এর একটি গুরুত্বপূর্ণ ব্যাখ্যা আছে — এটি প্রায় বলে দেয়
কনস্ট্রেইন্ট সামান্য শিথিল করলে (যেমন x + y = 6-এর বদলে x + y = 6.01)
মিনিমাম মান f কতটা পরিবর্তিত হবে (প্রতি একক পরিবর্তনে প্রায় λ পরিমাণ)। এই
"সেনসিটিভিটি" ব্যাখ্যা M11-এ সেনসিটিভিটি অ্যানালাইসিসের সাথে সম্পর্কিত।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১
উপরের সমাধানে আনকনস্ট্রেইনড মিনিমাম (1, 2)-এ f = 0, কিন্তু
কনস্ট্রেইনড মিনিমাম (2.5, 3.5)-এ f = 4.5। এই পার্থক্য কী বোঝায়?
এটি নিশ্চিত করে কনস্ট্রেইন্ট প্রয়োগ করলে অর্জনযোগ্য সেরা মান সবসময় আনকনস্ট্রেইনড সেরা মানের সমান বা
তার চেয়ে খারাপ হবে — কখনো ভালো নয় — কারণ কনস্ট্রেইন্ট সম্ভাব্য সমাধানের সেটকে সংকুচিত করে। এখানে
কনস্ট্রেইন্ট x+y=6-এর কারণে "বিনামূল্যে" মিনিমাম (1,2) অ্যাক্সেসযোগ্য নয়,
তাই একটি সমঝোতা (trade-off) বিন্দুতে পৌঁছাতে হয়েছে।
প্র ০২
উপরের উদাহরণে কনস্ট্রেইন্ট ছিল লিনিয়ার (x + y = 6)। যদি কনস্ট্রেইন্ট নন-লিনিয়ার
হতো (যেমন x² + y² = 25), তাহলে KKT সমীকরণের সিস্টেম সমাধান করা কেন বেশি কঠিন হতো
বলে আপনার মনে হয়?
নন-লিনিয়ার কনস্ট্রেইন্টে KKT সমীকরণগুলোও নন-লিনিয়ার হয়ে যায় (যেমন 2x - 2λx = 0-এর
মতো পদ, যেখানে λ ও x গুণ হচ্ছে) — এই ধরনের সিস্টেম M3-এর গসিয়ান এলিমিনেশন
দিয়ে সরাসরি সমাধান করা যায় না, বরং M2-এর নিউটন-রাফসনের মতো ইটারেটিভ রুট-ফাইন্ডিং মেথড প্রয়োজন হয়
(বহু-চলক সংস্করণে)।
প্র ০৩
এই পাঠে একটি মাত্র "সমতা" কনস্ট্রেইন্ট (x+y=6) ব্যবহার করা হয়েছে। বাস্তব-বিশ্বের
সমস্যায় প্রায়ই "অসমতা" কনস্ট্রেইন্ট থাকে (যেমন x ≥ 0)। এই ধরনের কনস্ট্রেইন্ট কেন সাধারণ
লাগ্রাঞ্জ মাল্টিপ্লায়ার পদ্ধতির জন্য ভিন্ন চ্যালেঞ্জ তৈরি করে বলে আপনার মনে হয়?
সমতা কনস্ট্রেইন্টে (=) আমরা জানি সমাধান ঠিক সেই সীমারেখায় থাকবে। কিন্তু অসমতা
কনস্ট্রেইন্টে (≥ বা ≤) সমাধান হয় সীমারেখায় থাকতে পারে, নয়তো ভেতরে —
আগে থেকে জানা যায় না কোনটি "সক্রিয়" (active)। এই কারণে অসমতা কনস্ট্রেইন্টের জন্য আরও সাধারণ
KKT (Karush-Kuhn-Tucker) শর্ত প্রয়োজন হয়, যা কোন কনস্ট্রেইন্ট সক্রিয় তা নির্ধারণ করে। M46-এ লিনিয়ার
প্রোগ্রামিংয়ে এই ধরনের অসমতা কনস্ট্রেইন্ট-ই মূল বিষয়।
অনুশীলন
-
চিন্তা করুন: উপরের কোড সেলে কনস্ট্রেইন্ট
x + y = 6-এর বদলেx + y = 3ব্যবহার করলে (অর্থাৎb = [2, 4, 3]), নতুন সমাধান বিন্দু(1, 2)-এর (আনকনস্ট্রেইনড মিনিমাম) কাছাকাছি হবে, নাকি দূরে থাকবে বলে আপনার ধারণা?যেহেতু
1 + 2 = 3, নতুন কনস্ট্রেইন্ট রেখাx+y=3ঠিক আনকনস্ট্রেইনড মিনিমাম বিন্দু(1, 2)-এর মধ্য দিয়ে যায় — তাই নতুন কনস্ট্রেইনড সমাধান সরাসরি(1, 2)-ই হবে বলে ধারণা করা যায়, এবংf-এর মান0হবে। -
পরীক্ষা করুন: উপরের কোড সেলে
b = [2, 4, 6]-কেb = [2, 4, 3]-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।সমাধান হয়
x = 1.000000, y = 2.000000, λ = 0.000000, এবংf(x, y) = 0.000000— ঠিক যেমন অনুমান করা হয়েছিল। লক্ষ্যণীয়:λ = 0কারণ কনস্ট্রেইন্ট এখানে "বাধা" দিচ্ছে না — আনকনস্ট্রেইনড মিনিমাম নিজেই কনস্ট্রেইন্ট রেখার উপর পড়ে যাওয়ায় কনস্ট্রেইন্টের কোনো "মূল্য" (marginal cost) নেই।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পরবর্তী পাঠ — লিনিয়ার প্রোগ্রামিং, সিমপ্লেক্স মেথড M9 · L46 যখন কনস্ট্রেইন্ট অসমতা (inequality) হয়, তখন লিনিয়ার প্রোগ্রামিং ও সিমপ্লেক্স মেথড কীভাবে ব্যবহৃত হয়।
- আগের পাঠ — অপ্টিমাইজেশনের জন্য নিউটনের মেথড M9 · L44 আনকনস্ট্রেইনড মিনিমাম দ্রুত খুঁজে বের করার আরেকটি মেথড, দ্বিতীয় ডেরিভেটিভ ব্যবহার করে।
- M3 — গসিয়ান এলিমিনেশন এই কোর্সে লিনিয়ার সমীকরণ সিস্টেম সমাধানের মূল টুল — এই পাঠে লাগ্রাঞ্জ মাল্টিপ্লায়ারের KKT সিস্টেম সমাধানে যা পুনর্ব্যবহার করা হয়েছে।