抽象强化器
smac.intensifier.abstract_intensifier #
AbstractIntensifier #
AbstractIntensifier(
scenario: Scenario,
n_seeds: int | None = None,
max_config_calls: int | None = None,
max_incumbents: int = 10,
seed: int | None = None,
)
强化器的抽象实现,支持多保真度、多目标和多线程。抽象强化器跟踪当前最佳配置(incumbent),该配置在运行历史(runhistory)每次更改时更新。
参数#
n_seeds : int | None, 默认为 None 每个实例使用的种子数量。在抽象强化器中用于确定验证试验。 max_config_calls : int, 默认为 None 最大配置评估次数。基本上,一个配置最多应评估多少个实例-种子键。在抽象强化器中用于确定验证试验。 max_incumbents : int, 默认为 10 在多目标情况下跟踪的当前最佳配置数量。 seed : int, 默认为 None 用于随机事件(如打乱种子)的内部种子。
源代码在 smac/intensifier/abstract_intensifier.py
中
__iter__ abstractmethod
#
强化器的主循环。此方法始终返回一个 TrialInfo 对象,尽管强化器算法可能需要等待试验结果。请参考特定的强化器以获取更多信息。
源代码在 smac/intensifier/abstract_intensifier.py
中
__post_init__ #
填充 self._tf_seeds
和 self._tf_instances
。此外,当前最佳配置也会更新。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_callback #
get_callback() -> Callback
强化器利用回调函数,根据运行历史高效地更新当前最佳配置(每次有新信息可用时)。此外,在此处包含回调函数为开发者提供了更多未来的选择。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_incumbent #
在单目标设置中返回当前的最佳配置。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_incumbent_instance_seed_budget_key_differences #
get_incumbent_instance_seed_budget_key_differences(
compare: bool = False,
) -> list[InstanceSeedBudgetKey]
在某些情况下,当前最佳配置在比其他配置更多的试验中进行评估。此方法返回不属于所有当前最佳配置的实例最低交集的实例。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_incumbent_instance_seed_budget_keys #
get_incumbent_instance_seed_budget_keys(
compare: bool = False,
) -> list[InstanceSeedBudgetKey]
查找所有当前最佳配置的实例-种子-预算键的最低交集。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_incumbents #
返回运行历史中的当前最佳配置(帕累托前沿上的点)的副本。在单目标优化的情况下,只返回一个(如果存在)当前最佳配置。
返回#
configs : list[Configuration] 帕累托前沿的配置。 sort_by : str, 默认为 None 按 cost
(成本最低优先)或 num_trials
(试验次数最少的配置优先)对试验进行排序。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_instance_seed_budget_keys #
get_instance_seed_budget_keys(
config: Configuration, compare: bool = False
) -> list[InstanceSeedBudgetKey]
返回给定配置的实例-种子-预算键。此方法用于更新当前最佳配置,并且可能因不同的强化器而异。例如,如果当前最佳配置只应在观察到的最高预算上进行比较。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_instance_seed_keys_of_interest #
get_instance_seed_keys_of_interest(
*, validate: bool = False, seed: int | None = None
) -> list[InstanceSeedKey]
返回实例-种子键列表。考虑运行历史(self._tf_seeds
和 self._tf_instances
)中的种子和实例。如果未找到种子或实例,将根据全局强化器种子生成新的种子和实例。
警告#
传入的种子仅用于验证。对于训练,使用全局强化器种子。
参数#
validate : bool, 默认为 False 是获取验证试验还是训练试验。唯一的区别在于使用了不同的种子。 seed : int | None, 默认为 None 用于验证试验的种子。
返回#
instance_seed_keys : list[InstanceSeedKey] 感兴趣的实例-种子键。
源代码在 smac/intensifier/abstract_intensifier.py
中
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 |
|
get_rejected_configs #
get_rejected_configs() -> list[Configuration]
在与当前最佳配置竞争失败时,返回被拒绝的配置。
源代码在 smac/intensifier/abstract_intensifier.py
中
get_state #
get_trials_of_interest #
get_trials_of_interest(
config: Configuration,
*,
validate: bool = False,
seed: int | None = None
) -> list[TrialInfo]
返回给定配置的感兴趣的试验。使用配置扩展 get_instance_seed_keys_of_interest
中的键。
源代码在 smac/intensifier/abstract_intensifier.py
中
load #
加载强化器的最新状态,包括当前最佳配置和轨迹。
源代码在 smac/intensifier/abstract_intensifier.py
中
reset #
重置强化器的内部变量。
源代码在 smac/intensifier/abstract_intensifier.py
中
save #
保存强化器的当前状态。除了状态(通过 get_state
获取)之外,此方法还保存当前最佳配置和轨迹。
源代码在 smac/intensifier/abstract_intensifier.py
中
set_state #
update_incumbents #
更新当前最佳配置。每当一个试验被添加到运行历史中时,都会调用此方法。由于仅使用受影响的配置和当前的最佳配置,因此此方法非常高效。此外,只有当配置在所有当前最佳实例上表现更好时,才会被视为当前最佳配置。
关键在于,如果没有当前最佳配置(在开始时),则第一个配置将成为当前最佳配置。对于下一个配置,我们需要检查该配置在所有已评估当前最佳配置的实例上是否表现更好。如果是这样,我们可以替换当前最佳配置。否则,a) 我们需要重新将配置加入队列以获取缺失的实例-种子-预算组合,或者 b) 将此配置标记为劣质(“已拒绝”),以便不再考虑它。比较行为由 self.get_instance_seed_budget_keys() 和 self.get_incumbent_instance_seed_budget_keys() 控制。
值得注意的是,此方法旨在支持多保真度和多目标优化。虽然 get_instance_seed_budget_keys() 方法和 self.get_incumbent_instance_seed_budget_keys() 用于实现多保真度行为,但 calculate_pareto_front() 被硬编码用于支持多目标优化,包括将单目标作为特例。 calculate_pareto_front() 在所有(在多目标情况下)当前最佳配置集合上调用,并附加挑战者配置,前提是其在种子-实例-预算组合方面具有足够的重叠。
最后,如果我们设置了 self._max_incumbents 并且帕累托前沿提供的当前最佳配置数量多于此指定数量,我们将使用拥挤距离来截取当前最佳配置。
源代码在 smac/intensifier/abstract_intensifier.py
中
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|