Struct vrp_core::construction::features::TransportFeatureBuilder
source · pub struct TransportFeatureBuilder { /* private fields */ }Expand description
Provides a way to build different flavors of time window feature.
Implementations§
source§impl TransportFeatureBuilder
impl TransportFeatureBuilder
sourcepub fn new(name: &str) -> Self
pub fn new(name: &str) -> Self
Creates a new instance of TransportFeatureBuilder.
Examples found in repository?
75 76 77 78 79 80 81 82 83 84 85 86 87
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model PDPTW
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// enable time constraint (not necessary, default behavior, here for demonstration purpose only)
.set_time_constrained(true)
.build_minimize_distance()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}More examples
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature
let hardware_feature = FeatureBuilder::default()
.with_name("hardware")
.with_constraint(HardwareConstraint { code: ViolationCode::default() })
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature, hardware_feature])?
.build()
}62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model CVRP
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// explicitly opt-out from time constraint on vehicles/jobs
.set_time_constrained(false)
.build_minimize_distance()?;
// configure goal of optimization: features with objectives are read from ordered feature list. Here we have:
// 1. minimum of unassigned jobs as the main objective
// 2. minimum distance traveled
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature that consists of an objective and a state
let priority_feature = FeatureBuilder::default()
.with_name("maximize-priority")
.with_objective(PriorityObjective)
.with_state(PriorityState)
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[priority_feature, minimize_unassigned, transport_feature, capacity_feature])?
.build()
}sourcepub fn set_violation_code(self, code: ViolationCode) -> Self
pub fn set_violation_code(self, code: ViolationCode) -> Self
Sets constraint violation code which is used to report back the reason of job’s unassignment. If not set, the default violation code is used.
sourcepub fn set_time_constrained(self, is_constrained: bool) -> Self
pub fn set_time_constrained(self, is_constrained: bool) -> Self
Marks feature as non-constrained meaning that there no need to consider time as a hard constraint. Default is true.
Examples found in repository?
75 76 77 78 79 80 81 82 83 84 85 86 87
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model PDPTW
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// enable time constraint (not necessary, default behavior, here for demonstration purpose only)
.set_time_constrained(true)
.build_minimize_distance()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}More examples
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature
let hardware_feature = FeatureBuilder::default()
.with_name("hardware")
.with_constraint(HardwareConstraint { code: ViolationCode::default() })
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature, hardware_feature])?
.build()
}62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model CVRP
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// explicitly opt-out from time constraint on vehicles/jobs
.set_time_constrained(false)
.build_minimize_distance()?;
// configure goal of optimization: features with objectives are read from ordered feature list. Here we have:
// 1. minimum of unassigned jobs as the main objective
// 2. minimum distance traveled
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature that consists of an objective and a state
let priority_feature = FeatureBuilder::default()
.with_name("maximize-priority")
.with_objective(PriorityObjective)
.with_state(PriorityState)
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[priority_feature, minimize_unassigned, transport_feature, capacity_feature])?
.build()
}sourcepub fn set_transport_cost(
self,
transport: Arc<dyn TransportCost + Send + Sync>,
) -> Self
pub fn set_transport_cost( self, transport: Arc<dyn TransportCost + Send + Sync>, ) -> Self
Sets transport costs to estimate distance.
Examples found in repository?
75 76 77 78 79 80 81 82 83 84 85 86 87
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model PDPTW
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// enable time constraint (not necessary, default behavior, here for demonstration purpose only)
.set_time_constrained(true)
.build_minimize_distance()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}More examples
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature
let hardware_feature = FeatureBuilder::default()
.with_name("hardware")
.with_constraint(HardwareConstraint { code: ViolationCode::default() })
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature, hardware_feature])?
.build()
}62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model CVRP
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// explicitly opt-out from time constraint on vehicles/jobs
.set_time_constrained(false)
.build_minimize_distance()?;
// configure goal of optimization: features with objectives are read from ordered feature list. Here we have:
// 1. minimum of unassigned jobs as the main objective
// 2. minimum distance traveled
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature that consists of an objective and a state
let priority_feature = FeatureBuilder::default()
.with_name("maximize-priority")
.with_objective(PriorityObjective)
.with_state(PriorityState)
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[priority_feature, minimize_unassigned, transport_feature, capacity_feature])?
.build()
}sourcepub fn set_activity_cost(
self,
activity: Arc<dyn ActivityCost + Send + Sync>,
) -> Self
pub fn set_activity_cost( self, activity: Arc<dyn ActivityCost + Send + Sync>, ) -> Self
Sets activity costs to estimate job start/end time. If omitted, then SimpleActivityCost is used by default.
sourcepub fn build_schedule_updater(self) -> GenericResult<Feature>
pub fn build_schedule_updater(self) -> GenericResult<Feature>
Builds a flavor of transport feature which only updates activity schedules. No objective, no constraint.
sourcepub fn build_minimize_duration(self) -> GenericResult<Feature>
pub fn build_minimize_duration(self) -> GenericResult<Feature>
Creates the transport feature which considers duration for minimization as a global objective. TODO: distance costs are still considered on local level.
sourcepub fn build_minimize_distance(self) -> GenericResult<Feature>
pub fn build_minimize_distance(self) -> GenericResult<Feature>
Creates the transport feature which considers distance for minimization as a global objective. TODO: duration costs are still considered on local level.
Examples found in repository?
75 76 77 78 79 80 81 82 83 84 85 86 87
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model PDPTW
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// enable time constraint (not necessary, default behavior, here for demonstration purpose only)
.set_time_constrained(true)
.build_minimize_distance()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}More examples
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature
let hardware_feature = FeatureBuilder::default()
.with_name("hardware")
.with_constraint(HardwareConstraint { code: ViolationCode::default() })
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature, hardware_feature])?
.build()
}62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
// configure features needed to model CVRP
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
// explicitly opt-out from time constraint on vehicles/jobs
.set_time_constrained(false)
.build_minimize_distance()?;
// configure goal of optimization: features with objectives are read from ordered feature list. Here we have:
// 1. minimum of unassigned jobs as the main objective
// 2. minimum distance traveled
GoalContextBuilder::with_features(&[minimize_unassigned, transport_feature, capacity_feature])?.build()
}117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
fn define_goal(transport: Arc<dyn TransportCost + Send + Sync>) -> GenericResult<GoalContext> {
let minimize_unassigned = MinimizeUnassignedBuilder::new("min-unassigned").build()?;
let capacity_feature = CapacityFeatureBuilder::<SingleDimLoad>::new("capacity").build()?;
let transport_feature = TransportFeatureBuilder::new("min-distance")
.set_transport_cost(transport)
.set_time_constrained(false)
.build_minimize_distance()?;
// create our custom feature that consists of an objective and a state
let priority_feature = FeatureBuilder::default()
.with_name("maximize-priority")
.with_objective(PriorityObjective)
.with_state(PriorityState)
.build()?;
// configure goal of optimization
GoalContextBuilder::with_features(&[priority_feature, minimize_unassigned, transport_feature, capacity_feature])?
.build()
}sourcepub fn build_minimize_cost(self) -> GenericResult<Feature>
pub fn build_minimize_cost(self) -> GenericResult<Feature>
Creates the transport feature which considers distance and duration for minimization.
Auto Trait Implementations§
impl Freeze for TransportFeatureBuilder
impl !RefUnwindSafe for TransportFeatureBuilder
impl Send for TransportFeatureBuilder
impl Sync for TransportFeatureBuilder
impl Unpin for TransportFeatureBuilder
impl !UnwindSafe for TransportFeatureBuilder
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more