Ошибка внутреннего объединения Matlab, когда в таблице есть столбец OptimizationVariable - PullRequest
1 голос
/ 20 июня 2019

Я сталкиваюсь с ошибкой, используя innerjoin, когда одна из таблиц содержит столбец объектов OptimizationVariable:

% A normal table
tLeft = table([1;2],[3;4],'VariableNames',{'v1' 'v2'})

% A table with a column of `optimvar` objects
tRight = table( [1;2] , optimvar('myvar',2,1) , ...
                'VariableNames',{'v1' 'ov2'})

% `join` works
tJoin = join(tLeft,tRight,'Key','v1')
showexpr(tJoin.ov2)
   % myvar(1)
   % myvar(2)

% `innerjoin` yields error assigning to optimvar object
tJoin = innerjoin(tLeft,tRight)

% Work-around
tJoin = innerjoin(tLeft,tRight,'RightVar',{})
tJoin = join( tJoin , tRight , 'RightVar','ov2' )
showexpr(tJoin.ov2)
   % myvar(1)
   % myvar(2)

Есть ли фундаментальный концептуальный недостаток innerjoin в таблице, содержащей столбец OptimizationVariable, или это просто болезненные боли в новом высокоуровневом рабочем процессе оптимизации Matlab?

1 Ответ

1 голос
/ 28 июня 2019

OptimizationVariable нельзя использовать, но можно OptimizationExpression. Это дает еще один обходной путь: создайте tRight с выражениями вместо переменных:

tRight = table( [1;2] , 1*optimvar('myvar',2,1) , ...
                'VariableNames',{'v1' 'ov2'})
...