[Canonical page](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/overview/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# suggest

Types for auto-assignment. Each requirement instance is a [`Slot`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/slot.md>): a scheduled leaf task, the resources allowed to fill it, and the assignment that fills it now, if any. Pass the slots and [`SuggestOptions`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-options.md>) to [`Project#suggestAssignments`](<https://docs.dhtmlx.com/planning-engine/java/api/project-suggest-assignments.md>). The options pick the slot categories to work on ([`AssignTarget`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-options.md#assigntarget>)), the assignments that stay fixed, the cost of each extra person and the number of rebalance passes.

The call returns a [`SuggestResult`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-result.md>). It holds the proposal as [`SchedulingChanges`](<https://docs.dhtmlx.com/planning-engine/java/api/changes/scheduling-changes.md>), which you commit with [`Project#apply`](<https://docs.dhtmlx.com/planning-engine/java/api/project-apply.md>). It also holds a step log ([`SuggestStep`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-result.md#suggeststep>) with its [`StepCost`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-result.md#stepcost>)), the slots left unfilled or invalid, and scores for the baseline ([`AssignTotal`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-result.md#assigntotal>)) and the proposal ([`SuggestProposal`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/suggest-result.md#suggestproposal>)). The project doesn't change until you apply.

[`Roster`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/roster.md>), returned by [`Project#roster`](<https://docs.dhtmlx.com/planning-engine/java/api/project-roster.md>), lists the scheduled leaf tasks, resources and active assignments ([`RosterAssignment`](<https://docs.dhtmlx.com/planning-engine/java/api/suggest/roster.md#rosterassignment>)) of the accepted state. Use it when your own code builds the slots. To build slots from skills and requirements, use [`SkillLayer.slots`](<https://docs.dhtmlx.com/planning-engine/java/api/skill-layer-slots.md>) with the types in [assign](<https://docs.dhtmlx.com/planning-engine/java/api/assign/overview.md>).

Most types here are mutable classes with public fields and a fluent `withX(value)` setter per field, and they implement [`DeepCloneable<T>`](<https://docs.dhtmlx.com/planning-engine/java/api/data/deep-cloneable.md>). `StepCost` and `AssignTotal` take their values in the constructor and have a `copy()` method. `AssignTarget` is an enum. Collection fields hold `Vec<T>`, and each collection setter also takes any `java.util.Collection`, so `List.of(...)` works. Every type here is in the `org.dhtmlx.plen` package. For how picks are made and how to read the proposal, see [Suggesting assignments](<https://docs.dhtmlx.com/planning-engine/java/resources-and-assignment/suggesting-assignments.md>).

:::category-index
:::
