我正在解决一个二进制整数线性程序(BILP)。为了生成优化表达式,我将决策变量的向量与每个决策值的向量的点积作为乘积。生成点积的两种不同方式会产生外观相同的优化表达式,但似乎没有办法确认它们是否相同。
Tdecisions = table;
% Binary decision variables
Tdecisions.YesNo = optimvar( 'YesNo' , 2,1 , ...
'Type','integer' , 'LowerBound',0 , 'UpperBound',1 );
% Utility/value coefficients for each decision
Tdecisions.VALUE = [ 1 ; 2 ];
% The two ways to get dot product should yield the same result
x = Tdecisions.YesNo' * Tdecisions.VALUE
y = dot( Tdecisions.YesNo , Tdecisions.VALUE )
%
% Output is:
% x = Linear OptimizationExpression YesNo(1) + 2*YesNo(2)
% y = Linear OptimizationExpression YesNo(1) + 2*YesNo(2)
% isequaln returns false, so it isn't up to the task
isequaln( x, y )
% Text expressions of OptmizationExpressions are identical (diff).
% This is not convenient.
writeexpr(x,'x.txt')
writeexpr(y,'y.txt')
由于我是Matlab基于混合整数线性程序(MILP)的基于问题的流程的新手,所以我认为这种健全性检查对于行业规模的问题可能很重要:是否有一种方法可以动态检查OptmizationExpression的等效性而无需求助于生成外部文本文件进行比较?
我正在使用Matlab 2019a。
谢谢。