Skip to content

算法(Algorithm)类

算法类是优化算法的基类,提供了算法运行的基本框架和通用功能。

主要属性

属性名类型说明
historydict记录算法运行信息,包含运行时数据和设置信息
modestr运行模式,'test'或'experiment'

history 结构

json
{
    "settings": {
        "problem_class": "问题类名",
        "search_algorithm_class": "算法类名",
        "response_strategy_class": "响应策略类名",
        "problem_params": {
            // 问题的简单属性(int, float, str, bool, None)
        },
        "search_algorithm_params": {
            // 算法的简单属性
        },
        "response_strategy_params": {
            // 响应策略的简单属性
        }
    },
    "runtime": {
        "1": {
            "1000": Population实例,
            "2000": Population实例
        },
        "2": {
            "1000": Population实例,
            "2000": Population实例
        }
    }
}

参数示例

  • problem_params 包含问题相关参数,如环境变化周期 tau、评估次数 nt、决策变量维度 n_var 等
  • search_algorithm_params 包含算法参数,如 NSGA-II 的种群大小、变异率、交叉率等
  • response_strategy_params 包含响应策略参数,如记忆库大小、预测步长等

核心方法

1. 优化接口

  • optimize(problem, response_strategy): 主优化接口
    • 参数:
      • problem: Problem 实例,待优化的问题
      • response_strategy: ResponseStrategy 实例,响应策略
    • 返回: 优化结果

必须实现

optimize 方法是抽象方法,必须由子类实现。未实现该方法将导致 NotImplementedError 异常。

2. 信息收集

  • collect_information(population, problem, response_strategy): 收集算法运行信息
    • 参数:
      • population: Population 实例,当前种群
      • problem: Problem 实例,优化问题
      • response_strategy: ResponseStrategy 实例,响应策略
    • 功能:
      1. 框架交互
        • 测试模式:提供数据给框架实时显示进化进程
        • 实验模式:向框架报告优化进度
      2. 历史记录
        • 保存种群历史信息到history

重要提示

  • 如果算法需要用到历史信息,需要手动保存

  • 实验模式下多个优化任务并行运行时,应合理控制保存频率,避免内存溢出

3. 进程控制

  • control_process(): 控制算法进程
    • 返回: bool,是否继续运行
    • 说明: 支持运行、暂停、停止三种状态用于框架的优化控制

使用示例

python
# 导入必要的模块
from problems.benchmark.DP1.main import DP1
from algorithms.response_strategy.NoResponse.main import NoResponse
from algorithms.search_algorithm.NSGA2.main import NSGA2

# 创建算法实例
nsga = NSGA2()
response = NoResponse()

# 创建问题实例
df1 = DP1(10, 10, 20, 100, 30)  # 参数:decision_num, n, tau, solution_num, total_evaluate_time

# 运行优化
nsga.optimize(df1, response)

如何实现自己的搜索算法

请参考自定义搜索算法章节,了解如何基于 Algorithm 类实现自己的搜索算法。