Вартість рюкзака нуль-один
Максимізуйте вартість не більш ніж 64 пар ваги й вартості за цілої місткості від нуля до 1000, використовуючи кожен предмет один раз.
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]Перевірте перед застосуванням
Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами.
Моделі
Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.
Проєкт
Перевірте нульову місткість і надто важкий предмет, відхиляючи нульові ваги та нецілі операнди до побудови таблиці.
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]Відокремте правило вибору від коду, що його реалізує
PackSerein підтримує розробку ПЗ за допомогою ШІ у робочому середовищі проєкту для Windows, де вимоги оптимізації можна обговорювати поряд із файлами реалізації. Опишіть, що можна вибирати, які обмеження обов’язкові та який результат насправді потрібен коду виклику. Попросіть асистента перевірити поточне подання перед зміною розв’язувача. Чітка ціль запобігає ситуації, коли правдоподібна реалізація розв’язує трохи іншу задачу.
Приклад knapsack.py пропонує завдання перевірки, у якому кожен предмет можна вибрати щонайбільше один раз за обмеженої місткості. Можна запитати, чи зберігає запропоноване оновлення це правило та чи застосунку потрібне лише значення або також вибрані предмети. Розв’яжіть невеликий випадок вручну, а потім перевірте за ним код. Залишайте межі входів і відхилені значення частиною тієї самої перевірки.
Коли патч готовий, запустіть тести проєкту для порожнього вибору, межі місткості та конкуруючих комбінацій. Перевірте контракт результату перед адаптацією споживача. PackSerein приймає підтримувані сумісні з OpenAI або Anthropic кінцеві точки й облікові дані за потреби. Нефільтровану модель ШІ можна вибрати, якщо вона доступна через підключення; її обмеження, межі контексту та підтримка інструментів залежать від моделі й сервера. Середовище допомагає впорядкувати рішення щодо коду, а ваші перевірки визначають, чи відповідає воно цілі.
Питання, що визначають задачу оптимізації
- Навіщо зазначати, чи можна вибрати предмет двічі?
Дозвіл повторного вибору змінює задачу й може змінити результат. Додайте це обмеження до запиту й протестуйте невеликий випадок, де повторення дало б іншу відповідь, а потім перевірте, чи оновлення його зберігає.
- Чи достатньо оптимального значення для застосунку?
Це залежить від коду виклику. Одним споживачам потрібна лише оцінка, іншим — також вибрані предмети. Зазначте потрібний результат перед запитом на зміни, щоб асистент не припускав, ніби одного числа достатньо для завершення функції.
- Як обробляти розв’язки з однаковим значенням?
Визначте, чи прийнятний будь-який допустимий оптимум, чи застосунку потрібне детерміноване правило розв’язання рівності. Якщо повертаються вибрані предмети, явно протестуйте рівність і перевірте правило замість покладання на випадковий порядок ітерації.
- Чи може приклад підтвердити продуктивність розв’язувача у великому масштабі?
Ні. Використовуйте його для обговорення обмеженої реалізації, а потім оцінюйте фактичний проєкт на потрібних йому розмірах. Невеликий правильний випадок і пояснення ШІ не підтверджують час виконання чи використання пам’яті в іншому масштабі.
PackSerein · Оновлено 2026-10-25