Valoarea rucsacului zero-unu
Maximizează valoarea a cel mult 64 de perechi greutate-valoare cu o capacitate întreagă între zero și 1000, folosind fiecare obiect o dată.
def knapsack_value(items, capacity):
items = tuple(tuple(item) for item in items)
if type(capacity) is not int or not 0 <= capacity <= 1000:
raise ValueError("capacity.range")
if len(items) > 64 or any(len(item) != 2 for item in items):
raise ValueError("items.shape")
if any(type(w) is not int or type(v) is not int or not 1 <= w <= 1000 or not 0 <= v <= 1000000 for w, v in items):
raise ValueError("item.range")
best = [0] * (capacity + 1)
for weight, value in items:
for limit in range(capacity, weight - 1, -1):
best[limit] = max(best[limit], best[limit - weight] + value)
return best[capacity]Verifică înainte de aplicare
Compară comportamentul real cu rezultatul așteptat. Dacă o verificare eșuează, cercetează cauza înainte de alte modificări.
Modele
Configurează un endpoint compatibil OpenAI sau Anthropic cu URL-ul de bază și cheia API, dacă este necesară. Testează conexiunea. Serverul local trebuie să ruleze; instrumentele externe pot transmite date separat.
Proiect
Testează capacitatea zero și un obiect prea greu, respingând greutățile zero sau operanzii neîntregi înainte de construirea tabelului.
def knapsack_value(items, capacity):
items = tuple(tuple(item) for item in items)
if type(capacity) is not int or not 0 <= capacity <= 1000:
raise ValueError("capacity.range")
if len(items) > 64 or any(len(item) != 2 for item in items):
raise ValueError("items.shape")
if any(type(w) is not int or type(v) is not int or not 1 <= w <= 1000 or not 0 <= v <= 1000000 for w, v in items):
raise ValueError("item.range")
best = [0] * (capacity + 1)
for weight, value in items:
for limit in range(capacity, weight - 1, -1):
best[limit] = max(best[limit], best[limit - weight] + value)
return best[capacity]Separă regula de selecție de codul care o implementează
PackSerein sprijină dezvoltarea software asistată de IA într-un spațiu de proiect Windows în care cerințele de optimizare pot fi discutate alături de fișierele implementării. Descrie ce poate fi selectat, ce restricții sunt obligatorii și ce rezultat îi trebuie efectiv apelantului. Cere asistentului să inspecteze reprezentarea actuală înainte de a modifica algoritmul de rezolvare. Un obiectiv clar împiedică o implementare plauzibilă să rezolve o problemă subtil diferită.
Exemplul knapsack.py sugerează o sarcină de revizuire în care fiecare obiect poate fi ales cel mult o dată, respectând o limită de capacitate. Poți întreba dacă o modificare propusă păstrează regula și dacă aplicația are nevoie doar de o valoare sau și de obiectele alese. Rezolvă manual un caz mic, apoi inspectează codul în raport cu el. Păstrează limitele intrărilor și valorile respinse în aceeași revizuire.
Când modificarea este gata, rulează testele proiectului pentru o selecție vidă, o limită de capacitate și combinații concurente. Verifică contractul rezultatului înainte de a adapta consumatorul. PackSerein acceptă endpointuri compatibile cu OpenAI sau Anthropic și date de autentificare când sunt necesare. Un model IA nefiltrat poate fi selectat dacă este disponibil prin conexiune; restricțiile, limitele de context și suportul pentru instrumente depind în continuare de model și server. Spațiul de lucru ajută la structurarea deciziei de programare, iar verificările tale stabilesc dacă aceasta îndeplinește obiectivul.
Întrebări care definesc o sarcină de optimizare
- De ce să precizez dacă un obiect poate fi selectat de două ori?
Permiterea selecției repetate schimbă problema și poate schimba rezultatul. Include această restricție în cerere și testează un caz mic în care repetarea ar produce alt răspuns, apoi inspectează dacă modificarea o păstrează.
- Este suficientă o valoare optimă pentru aplicație?
Depinde de apelant. Unii consumatori au nevoie doar de scor, iar alții și de obiectele selectate. Precizează rezultatul necesar înainte de a solicita modificări, astfel încât asistentul să nu presupună că un singur număr finalizează funcționalitatea.
- Cum trebuie tratate soluțiile cu valoare egală?
Definește dacă orice optim valid este acceptabil sau dacă aplicația necesită o regulă deterministă pentru egalități. Dacă sunt returnate obiectele selectate, testează explicit egalitățile și revizuiește regula, fără a te baza pe ordinea incidentală de iterare.
- Poate exemplul să stabilească performanța rezolvitorului la scară mare?
Nu. Folosește-l pentru a discuta o implementare delimitată, apoi evaluează proiectul real la dimensiunile necesare. Un caz mic corect și o explicație IA nu stabilesc comportamentul timpului de execuție sau al memoriei la altă scară.
PackSerein · Actualizat 2026-10-25