# Функция "Алгоритм на слот"

Функция **"Алгоритм на слот"** (Algorithm per slot) — это мощный инструмент для создания сложных рекомендательных стратегий, который позволяет назначать **разные рекомендательные алгоритмы на разные позиции (слоты)** в виджете.

Это даёт возможность комбинировать различные подходы к рекомендациям в рамках одного блока, делая его более гибким и эффективным.

---

## Концепция и преимущества

Вместо того чтобы использовать один алгоритм для всего виджета, вы можете, например, настроить следующую логику:
- **Слоты 1-3:** Персональные рекомендации на основе `User Affinity`.
- **Слоты 4-6:** Товары, которые часто покупают вместе (`Purchased Together`).
- **Остальные слоты:** Самые популярные товары (`Popularity`).

**Ключевые преимущества:**
1.  **Гибкость:** Комбинируйте сильные стороны разных алгоритмов в одном виджете.
2.  **Повышение релевантности:** Показывайте наиболее персональные рекомендации на самых видных местах.
3.  **Управление разнообразием:** Избегайте однотипной выдачи, смешивая разные типы рекомендаций.

---

## Механика работы и настройка

Логика "Алгоритм на слот" основана на конфигурации массива `algorithm` в модели стратегии. Настройка происходит в интерфейсе создания/редактирования стратегии.

![](/personalization/Recs/images/algorithm_per_slot.png)

**Как это работает:**
- В настройках алгоритма вы можете переключиться в режим "Алгоритм на слот".
- Появляется интерфейс для настройки 10 слотов (с 1 по 10) и алгоритма по умолчанию.
- **Индекс слота** соответствует его позиции в виджете.
- **Алгоритм по умолчанию** (`Default`) применяется ко всем слотам, начиная с 11-го, или к тем, для которых алгоритм не был задан явно.

**Пример конфигурации:**
- **Слот 1:** `User Affinity`
- **Слот 2:** `User Affinity`
- **Слот 3:** `Recently Viewed`
- **Слоты 4-10:** Не заданы (будет использован `Default`)
- **Default:** `Popularity`

**Результат:**
- В первых двух слотах будут персональные рекомендации.
- В третьем — недавно просмотренный товар.
- Во всех остальных слотах — популярные товары.

---

## Особенности и ограничения

При использовании этой функции важно понимать несколько ключевых нюансов, которые влияют на итоговую выдачу.

### 1. Фильтры и правила применяются глобально

Все **предустановленные фильтры** и **пользовательские правила `Include`/`Exclude`**, настроенные в стратегии, применяются **глобально ко всем алгоритмам**, а не к какому-то конкретному слоту.

**Пример:**
Если вы добавили правило `Exclude` для бренда "X", то товары этого бренда будут исключены из выдачи **всех** алгоритмов, назначенных на слоты (`User Affinity`, `Popularity` и т.д.).

### 2. Взаимодействие с `Pin`-правилами

Правила `Pin` (закрепление товара) имеют **наивысший приоритет** и выполняются **до** логики "Алгоритм на слот".

- Если вы закрепили товар в слоте №2, то в этом слоте будет показан именно этот товар, а алгоритм, назначенный на слот №2, будет проигнорирован.
- Остальные слоты будут заполнены в соответствии с их назначенными алгоритмами.

### 3. Логика `fallback`

Если один из алгоритмов, назначенный на конкретный слот, не возвращает результат (например, `User Affinity` для нового пользователя), система **не будет** применять `fallback`-цепочку этого алгоритма. Вместо этого она сразу переключится на **алгоритм по умолчанию (`Default`)**, заданный в стратегии.

**Пример:**
- **Слот 1:** `User Affinity` (не вернул результат)
- **Default:** `Popularity`

**Результат:** В слоте 1 будет показан товар из алгоритма `Popularity`, а не из `fallback`-цепочки `User Affinity` (которая обычно `Viewed with Recently Viewed` → `Popularity`).

### 4. Дедупликация

По умолчанию система дедуплицирует товары по `group_id` между всеми слотами, чтобы избежать показа одинаковых товаров в одном виджете.

Исключение: для алгоритма `Similarity` текущая товарная группа может быть представлена несколькими sibling SKU, если для секции разрешена внутренняя настройка `max_same_group_items`. Для остальных групп по-прежнему действует правило "не более одного товара на `group_id`". Изменить `max_same_group_items` может только аккаунт-менеджер.
