跳到主要内容
版本:v0.7.0 beta

兼容性变更与升级指南

该文档介绍了v0.7.0版本对v0.6.0的兼容性变更与迁移方法.

变量顺序

v0.7.0版本在生成代码时, 可能会改变变量的顺序, 在访问变量时推荐使用生成的宏定义访问, 例如var[VAR_X]来访问变量, 而不是直接使用var[0]来访问变量.

变量的顺序可以通过以下方式确认:

  1. 通过生成的宏定义确认
  2. 在代码生成时设置option.verbose = True来查看变量的定义顺序

约束顺序

对于通用不等式约束 (general_inequality),v0.7.0版本在生成代码时按照以下顺序排列约束 (而非用户定义的顺序):

  1. 硬约束
  2. l1松弛的软约束
  3. quadratic松弛的软约束

对于等式约束, v0.7.0版本在生成代码时可能会改变约束的顺序.

约束的真正顺序可以通过以下方式确认:

  1. 在生成的代码中查看约束的定义顺序,例如模型名称为vehicle,则可以在生成的代码中搜索vehicle_g来查看约束的定义顺序
  2. 在代码生成时设置option.verbose = True来查看约束的定义顺序

因此,如果用户在v0.6.0版本中依赖于通用不等式约束的特定顺序,例如:

  1. 定义自定义外部函数时,需要按照特定的顺序定义
  2. 在代码中使用约束的顺序来访问约束的属性或结果 (例如获取对偶变量)

那么在升级到v0.7.0版本后, 需要按照新的约束顺序来修改代码, 以保证代码的正确性.

Hessian矩阵

在v0.7.0版本中, Hessian矩阵的大小从(nvar * (nvar + 1)) / 2变为nvar * nvar, 且只存储其包含对角线的下三角部分 (即其上三角部分的值未被使用), 并且按照列优先顺序存储.

文件uuid

对于每次模型生成,v0.7.0版本会在生成的代码中(包括prob与solver的代码)定义一个uuid来唯一标识该次生成, 以便在运行时检查prob与solver的一致性. 因此, 在升级到v0.7.0版本后, 需要保证编译和运行时使用的prob与solver是同一次生成的, 否则会出现uuid不一致的错误. 例如以下的配置会出现错误 (编译错误或运行错误):

  • 完全相同的模型生成两次, 但第一次生成的prob被第二次生成的solver使用
  • 相同的模型,不同的部署环境,两者共用prob

QNX系统的代码生成

在v0.7.0版本中, 生成QNX系统的代码时, 区分了QNX系统的版本,其中:

  • qnx7-arm64-gcc对应v0.6.0版本中的qnx-arm64-gcc
  • qnx8-arm64-gcc为新增的对qnx8的支持