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

আপনি যা করবেন
- আপনার গুগল ক্লাউড প্রজেক্টের বিপরীতে একটি আলফাএভলভ এক্সপেরিমেন্ট কনফিগার করুন ।
- একটি বিবর্তনীয় অনুসন্ধান চালান যা স্থানীয়ভাবে একটি সার্কেল-প্যাকিং অ্যালগরিদমকে উন্নত করে।
- সেরা বিকশিত প্রোগ্রামটির স্কোর, র্যাঙ্কিং এবং ভিজ্যুয়ালাইজেশন পড়ুন।
- প্যাটার্নটিকে সাধারণীকরণ করতে ট্রাভেলিং সেলসম্যান প্রবলেম-এর উপর লুপটি পুনরাবৃত্তি করুন।
- অনুসন্ধানের বাজেট সমন্বয় করুন (প্রার্থী, যুগপৎ সংখ্যা, মডেল)
আপনার যা যা লাগবে
- ক্রোমের মতো একটি ওয়েব ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- পাইথন ৩.৯ বা তার পরবর্তী সংস্করণ এবং
uv - পাইথন এবং কমান্ড লাইন সম্পর্কে প্রাথমিক ধারণা
এই কোডল্যাবটি সকল স্তরের AI/ML ইঞ্জিনিয়ার এবং ডেভেলপারদের জন্য। ইভোলিউশনারি-কম্পিউটেশন বিষয়ে কোনো পূর্বজ্ঞান থাকা আবশ্যক নয়।
সম্পূর্ণ করতে আনুমানিক সময়: ৪৫–৬০ মিনিট ।
খরচ: এই কোডল্যাবটি লোকাল ইভ্যালুয়েশন ব্যবহার করে (কোনো GPU বা GKE নেই)। একমাত্র খরচ হলো ক্যান্ডিডেট তৈরির জন্য AlphaEvolve API ব্যবহার।
AlphaEvolve ক্লাউড ক্লায়েন্ট লাইব্রেরি v0.1.0, Python 3.9+, এবং circle_packing ও tsp উদাহরণগুলোতে পরীক্ষা করা হয়েছে।
২. শুরু করার আগে
আপনার প্রজেক্ট নির্বাচন করুন এবং API সক্রিয় করুন।
- গুগল ক্লাউড কনসোলে , বিলিং সক্ষম করা আছে এমন একটি প্রজেক্ট নির্বাচন করুন বা তৈরি করুন, তারপর আপনার টার্মিনালে এটি সেট করুন:
gcloud config set project <YOUR_PROJECT_ID>
- ডিসকভারি ইঞ্জিন এপিআই সক্রিয় করুন, যা আলফাইভলভকে পরিষেবা প্রদান করে:
gcloud services enable discoveryengine.googleapis.com
আপনার জেমিনি এন্টারপ্রাইজ অ্যাপ আইডি খুঁজুন
AlphaEvolve, Gemini Enterprise- এর মাধ্যমে পরিবেশিত হয় (এর অন্তর্নিহিত REST সারফেস হলো Discovery Engine API)। GE_APP_ID সেটিংটির জন্য আপনার অ্যাপের ডিসপ্লে নেম নয়, বরং আইডি প্রয়োজন।
- আপনার প্রোজেক্টের জন্য জেমিনি এন্টারপ্রাইজ অ্যাপস পেজটি খুলুন।
- আপনার অ্যাপে ক্লিক করুন এবং আইডি ফিল্ডটি কপি করুন (উদাহরণস্বরূপ,
gemini-enterprise-1234567890_1234567890123)।
প্রমাণীকরণ করুন, ক্লোন করুন এবং ইনস্টল করুন
- অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়ালের জন্য প্রমাণীকরণ করুন:
gcloud auth application-default login
- স্যাম্পল রিপোটি ক্লোন করে খুলুন। আপনি প্রতিটি কমান্ড এই রিপো রুট থেকেই চালাবেন:
git clone https://github.com/Google-Cloud-AI/alphaevolve-on-googlecloud.git
cd alphaevolve-on-googlecloud
- একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন এবং এতে AlphaEvolve ক্লায়েন্ট লাইব্রেরিটি ইনস্টল করুন:
uv venv
uv pip install -e ".[dev]"
uv venv রিপো-তে একটি .venv তৈরি করে; uv pip install -e ".[dev]" alpha_evolve প্যাকেজ (সম্পাদনাযোগ্য) এবং টেস্ট টুলস ইনস্টল করে। আপনি uv run দিয়ে এক্সপেরিমেন্টগুলো চালু করবেন, যা স্বয়ংক্রিয়ভাবে এই এনভায়রনমেন্টটি ব্যবহার করে।
৩. আলফাইভলভ লুপটি বুঝুন
যেকোনো কিছু চালানোর আগে, AlphaEvolve-এর প্রয়োজনীয় তিনটি বিষয় বুঝে নিন। এটিই সেই মানসিক মডেল যা আপনি প্রতিটি পরীক্ষার জন্য পুনরায় ব্যবহার করবেন।
বীজ কর্মসূচি এবং EVOLVE-BLOCK
AlphaEvolve শুধুমাত্র দুটি মার্কারের মধ্যবর্তী কোডটি পুনর্লিখন করে। ফাইলের বাকি সবকিছুই স্থির কাঠামো যা এটি স্পর্শ করতে পারে না। examples/circle_packing/src/program.py ফাইলটি খুলুন — এর সিডটি হলো একটি সাধারণ সমকেন্দ্রিক-বলয় প্যাকিং:
# EVOLVE-BLOCK-START
"""Constructor-based circle packing for n=26 circles"""
import numpy as np
def construct_packing(n, random_seed: int):
"""Construct an arrangement of 26 circles in a unit square.
The goal is to maximize the sum of their radii.
Returns (centers, radii, sum_of_radii).
"""
rng = np.random.default_rng(random_seed)
centers = np.zeros((n, 2))
# A simple starting pattern — evolution will improve this.
centers[0] = [0.5, 0.5] # one circle in the center
for i in range(8): # 8 in an inner ring
angle = 2 * np.pi * i / 8
centers[i + 1] = [0.5 + 0.3 * np.cos(angle), 0.5 + 0.3 * np.sin(angle)]
for i in range(16): # 16 in an outer ring
angle = 2 * np.pi * i / 16 * rng.uniform(0.9, 1.1)
centers[i + 9] = [0.5 + 0.7 * np.cos(angle), 0.5 + 0.7 * np.sin(angle)]
centers = np.clip(centers, 0.01, 0.99) # keep everything in the square
radii = compute_max_radii(centers, random_seed)
return centers, radii, np.sum(radii)
def compute_max_radii(centers, random_seed: int):
"""Grow each circle to touch its nearest border or neighbor (no overlaps)."""
# ... see src/program.py for the full helper ...
# EVOLVE-BLOCK-END
EVOLVE-BLOCK-START / EVOLVE-BLOCK-END এর বাইরের সবকিছু — evaluate() ফাংশন এবং ওভারল্যাপ চেক সহ — অপরিবর্তিত থাকে। এই বিভাজনটাই হলো মূল কৌশল: জেমিনি তার পছন্দমতো যেকোনো প্যাকিং অ্যালগরিদম প্রস্তাব করতে পারে, কিন্তু কোনো ক্যান্ডিডেটের স্কোরিং পদ্ধতি পরিবর্তন করতে পারে না।
মূল্যায়নকারী এবং স্কোর
examples/circle_packing/src/evaluate.py প্রতিটি ক্যান্ডিডেটকে একটি স্যান্ডবক্সে চালায় এবং একটি স্কোর ফেরত দেয়। সার্কেল প্যাকিং-এর জন্য মেট্রিকটি হলো sum_of_radii , এবং এর মান যত বেশি, ফলাফল তত ভালো ।
CIRCLE_PACKING_EVALUATION_METRIC = "sum_of_radii"
CIRCLE_PACKING_EVALUATION_INPUTS = {"n": 26}
যদি কোনো প্রার্থী নিয়ম ভঙ্গ করে — যেমন বৃত্তগুলো একে অপরের উপর পড়ে বা বর্গক্ষেত্রের বাইরে চলে যায় — তাহলে মূল্যায়নকারী -inf এর সাথে একটি অন্তর্দৃষ্টি ফেরত পাঠান, যা ব্যাখ্যা করে যে কী ভুল হয়েছে। সেই অন্তর্দৃষ্টিগুলো জেমিনির কাছে ফেরত পাঠানো হয়, যাতে পরবর্তী প্রজন্ম একই ভুল এড়াতে পারে।
৪. আপনার প্রথম পরীক্ষাটি চালান।
পরীক্ষাটি কনফিগার করুন
রিপো রুট থেকে, সার্কেল-প্যাকিং টেমপ্লেট ব্যবহার করে আপনার .env তৈরি করুন:
cp examples/circle_packing/example.env .env
.env খুলুন এবং শুধু আপনার প্রজেক্ট ও অ্যাপ আইডি সেট করুন — প্রথমবার চালানোর জন্য বাকি সবকিছু ডিফল্ট হিসেবেই কাজ করবে:
PROJECT_ID=<YOUR_PROJECT_ID>
GE_APP_ID=<YOUR_GEMINI_ENTERPRISE_APP_ID>
ডিফল্ট সেটিংস জেমিনি মডেলের মিশ্রণ ( MODEL_1=gemini-3.5-flash , ওয়েট 0.7 ; MODEL_2=gemini-3.1-pro-preview ওয়েট 0.3 ) ব্যবহার করে ক্যান্ডিডেট তৈরি করে এবং সার্চটিকে MAX_PROGRAMS_EVALUATED=10 ও CONCURRENCY=4 এ সীমাবদ্ধ রাখে — যা লুপটিকে দ্রুত কাজ করতে দেখার জন্য যথেষ্ট।
বিবর্তন শুরু করুন
রিপো রুট থেকে এক্সপেরিমেন্টটি চালান:
uv run python -m examples.circle_packing.src.run_evolution
এটি সিড প্রোগ্রামটি আপলোড করে, অনুসন্ধান শুরু করে এবং ১০টি সম্ভাব্য প্রার্থী মূল্যায়ন না হওয়া পর্যন্ত লোকাল কন্ট্রোল লুপটি চালায়। যেহেতু আপনি মডিউলটিকে সরাসরি কল করছেন (কোনো র্যাপার ছাড়া), তাই ঠিক কী চলছে তা আপনি দেখতে পারেন — এবং পরীক্ষা-নিরীক্ষার জন্য ফাইলটি সম্পাদনাও করতে পারেন।
আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:
INFO:alpha_evolve.experiment:Creating a new AlphaEvolve experiment INFO:alpha_evolve.controller:Evolution loop started: 4 sampler(s), 32 evaluator(s), target=10 programs INFO:alpha_evolve.controller:Waiting for the backend to generate candidates... (generated=0, evaluated=0/10, idle=10s) INFO:alpha_evolve.workers:Candidate 1060655338894100 evaluated → sum_of_radii=0.8114 INFO:alpha_evolve.controller:Progress: generated=2, evaluated=1/10, queued=0 ... INFO:alpha_evolve.controller:Stopping criteria met (10/10 programs evaluated).
প্রাথমিক প্রার্থীদের স্কোর সাধারণত ০.৮–১.০ এর মধ্যে থাকে; এরপর থেকে অনুসন্ধানের মান উন্নত হয়। লুপটি শেষ হলে, এটি র্যাঙ্ক করা প্রোগ্রামগুলো প্রিন্ট করে এবং matplotlib ব্যবহার করে সেরা প্যাকিংগুলো রেন্ডার করে।
দ্রষ্টব্য: সমস্যা সমাধান: PERMISSION_DENIED বা 403 মানে সাধারণত প্রজেক্টে ডিসকভারি ইঞ্জিন এপিআই (Discovery Engine API) সক্রিয় করা নেই। "Before you begin" ধাপটি পুনরায় পরীক্ষা করুন। যে রানটি "Failed to create experiment" বার্তা দিয়ে সাথে সাথেই শেষ হয়ে যায়, তার মানে হলো .env ফাইলে থাকা ক্রেডেনশিয়াল বা GE_APP_ID ভুল আছে।
৫. ফলাফলগুলো পড়ুন।
রানটি ব্যাসার্ধের যোগফল sum_of_radii ) অনুসারে সেরা প্রোগ্রামগুলোকে র্যাঙ্ক করে প্রিন্ট করে (মান যত বেশি, তত ভালো)। দুটি বিষয় লক্ষ্য রাখতে হবে:
- স্কোর বেড়েছে। সর্বোত্তম বিকশিত
sum_of_radiiবীজের সমকেন্দ্রিক-বলয় বিন্যাসকে ছাড়িয়ে যাবে। মিথুন রাশি সাধারণত আবিষ্কার করে যে কোণ এবং প্রান্তের কাছাকাছি বৃত্তগুলি আরও বড় হতে পারে, এবং অভ্যন্তরভাগের ভারসাম্য পুনঃস্থাপন করে। - অবৈধ প্রার্থীদের বাদ দেওয়া হয়। যে কোনো প্রোগ্রাম যা ওভারল্যাপিং বা সীমার বাইরের বৃত্ত তৈরি করেছে, তার স্কোর
-infহওয়ায় র্যাঙ্কিং থেকে বাদ দেওয়া হয় — এটি কনস্ট্রেইন্ট ফিডব্যাকের কার্যকারিতা, কোনো ত্রুটি নয়।
এখন আপনার কাছে সম্পূর্ণ চক্রটি রয়েছে: বীজ বপন -> তৈরি -> মূল্যায়ন -> স্কোর প্রদান -> পুনরাবৃত্তি। AlphaEvolve-এর বাকি সবকিছুই হলো মূল্যায়নটি কোথায় চলে তার একটি ভিন্ন রূপ।
৬. একটি প্রকৃত অনুসন্ধান ব্যবস্থা গড়ে তুলুন: টিএসপি
সার্কেল প্যাকিং দ্রুত কনভার্জ করে। আরও গভীর কোনো সমস্যার ক্ষেত্রে সার্চের কার্যকারিতা অনুভব করতে, একটি ট্রাভেলিং সেলসম্যান প্রবলেম হিউরিস্টিক বিকশিত করুন। প্যাটার্নটি হুবহু একই — শুধু সিড এবং মেট্রিক পরিবর্তিত হয়, এবং টিএসপি উদাহরণটি আপনার .env (প্রজেক্ট, বাজেট, এবং কনকারেন্সি) পুনরায় ব্যবহার করে।
-
.envফাইলে বাজেট বাড়িয়ে দিন, যাতে দীর্ঘতর অনুসন্ধানের উন্নতির সুযোগ থাকে:
# in .env — raise the generation cap and the evaluation target together
MAX_PROGRAMS_GENERATED=20
MAX_PROGRAMS_EVALUATED=20
- রিপো রুট থেকে এটি চালান:
uv run python -m examples.tsp.src.run_evolution
এখানে সিডটি হলো ৫০টি শহরের উপর একটি নিকটতম-প্রতিবেশী ট্যুর; মেট্রিকটি হলো neg_tour_length (৫টি নির্দিষ্ট ইনস্ট্যান্স জুড়ে গড় ট্যুর দৈর্ঘ্য ঋণাত্মক, তাই এর মান যত বেশি হবে তত ভালো )। examples/tsp/src/program.py খুলুন এবং লক্ষ্য করুন যে শুধুমাত্র construct_tour(distances, n) ফাংশনটি EVOLVE-BLOCK-এর ভিতরে রয়েছে।
সমস্যা দুটি একই ধরনের, শুধু অংশগুলো ভিন্ন:
সমস্যা | ভাষা | মূল্যায়ন | মেট্রিক (বেশি হলে ভালো) | যা বিকশিত হয় |
| পাইথন | স্থানীয় | | |
| পাইথন | স্থানীয় | | |
অনুসন্ধানটি চলার সময়, লক্ষ্য করুন neg_tour_length কীভাবে বাড়তে থাকে (শূন্যের কাছাকাছি আসতে থাকে), যখন জেমিনি নিকটতম-প্রতিবেশী পর্যায় পেরিয়ে 2-opt / or-opt-ধাঁচের উন্নতির দিকে এগোয় — যে কৌশলগুলো আপনি লেখেননি।
৭. অনুসন্ধানটি পরিমার্জন করুন
এখন যেহেতু উভয় রানই কাজ করছে, .env ফাইলে বাজেটটি সমন্বয় করুন:
-
MAX_PROGRAMS_EVALUATED— কতজন প্রার্থীকে মূল্যায়ন করা হবে। প্রার্থীর সংখ্যা বেশি হলে অনুসন্ধান আরও গভীর হবে এবং খরচ ও সময় উভয়ই বেশি লাগবে। -
CONCURRENCY— একই সময়ে কতজন প্রার্থীকে সক্রিয় করা হয়। -
MODEL_1/MODEL_2(MODEL_1_WEIGHT/MODEL_2_WEIGHTসহ) — জেমিনি মডেলগুলোর ওয়েটযুক্ত মিশ্রণ যা সার্কেল-প্যাকিং রানে ক্যান্ডিডেট তৈরি করে (TSP মডিউল এর পরিবর্তে একটিমাত্রMODELপড়ে)। অনুমোদিত মানগুলো হলোgemini-3.5-flashএবংgemini-3.1-pro-preview। কম জেনারেশনে আরও ভালো প্রোগ্রাম খুঁজে পেতে শক্তিশালী মডেলের দিকে ওয়েট বাড়ান।
প্রতিটি পরিবর্তনের পর uv run python -m examples.circle_packing.src.run_evolution (অথবা tsp মডিউল) দিয়ে পুনরায় চালান।
দ্রষ্টব্য: MAX_PROGRAMS_EVALUATED বাড়ানো এবং একটি বড় মডেলে পরিবর্তন করা, উভয় ক্ষেত্রেই খরচ বাড়ে। যেহেতু এই কোডল্যাবটি লোকাল ইভ্যালুয়েশন ব্যবহার করে, তাই কোনো GPU চার্জ নেই, কিন্তু প্রতিটি জেনারেটেড ক্যান্ডিডেটের জন্য আপনাকে AlphaEvolve API ব্যবহারের জন্য অর্থ প্রদান করতে হবে। ছোট থেকে শুরু করুন।
৮. পরিষ্কার করুন
এই কোডল্যাবটি লোকাল ইভ্যালুয়েশন ব্যবহার করে, তাই বিলযোগ্য কিছুই চালু থাকে না — কোনো ক্লাস্টার, জিপিইউ বা ডেপ্লয়েড সার্ভিস নেই। আপনার চেকআউট সম্পূর্ণরূপে রিসেট করতে:
git clean -xfd # removes .env, .venv, and generated outputs
দ্রষ্টব্য: git clean -xfd আপনার .env (প্রজেক্ট সেটিংস সহ) এবং .venv ফাইল মুছে ফেলে। আপনি যদি পরীক্ষা-নিরীক্ষা চালিয়ে যেতে চান তবে এটি এড়িয়ে যান।
আপনি যদি শুধুমাত্র এই কোডল্যাবের জন্য একটি প্রজেক্ট তৈরি করে থাকেন, তাহলে সমস্ত চার্জ বন্ধ করতে কনসোল থেকে সেটি ডিলিট করে দিন।
৯. অভিনন্দন
অভিনন্দন! আপনি গুগল ক্লাউডে আপনার প্রথম AlphaEvolve এক্সপেরিমেন্টগুলো চালিয়েছেন এবং শুধুমাত্র একটি সিড প্রোগ্রাম, একটি স্কোরিং ফাংশন ও Gemini ব্যবহার করে দুটি অ্যালগরিদম—একটি সার্কেল প্যাকিং এবং একটি TSP হিউরিস্টিক—বিকশিত করেছেন।
আপনি যা শিখেছেন
- AlphaEvolve-এর লুপ যেভাবে কাজ করে: সিড -> জেনারেট -> ইভ্যালুয়েট -> স্কোর -> রিপিট
- EVOLVE-BLOCK কন্ট্রাক্ট, যা মেট্রিকের সাথে কারসাজি না করেই সার্চকে একটি রেসিপি অপ্টিমাইজ করতে দেয়।
- স্কোর এবং ব্যর্থতা থেকে প্রাপ্ত শিক্ষা কীভাবে পরবর্তী প্রজন্মকে চালিত করে
- একটি স্থানীয়-মূল্যায়ন পরীক্ষা কীভাবে কনফিগার, চালানো, পড়া এবং টিউন করতে হয়
অন্যান্য কোডল্যাব
এগুলো স্বতন্ত্র — যেকোনো ক্রমে করতে পারেন।
- রিমোট ইভ্যালুয়েটরের সাহায্যে কম্পাইল করা কোডের উন্নতি সাধন করুন : ক্লাউড রান-এ একটি কন্টেইনারাইজড ইভ্যালুয়েটর দ্বারা স্কোর করা একটি রাস্ট/সি++ অ্যালগরিদমের উন্নতি সাধন করুন।
- GKE + Ray-তে LLM ফাইন-টিউনিং উন্নত করুন : আপনার নিজস্ব ক্লাস্টারে ভারী, সমান্তরাল GPU মূল্যায়ন চালান।