Conversion to double from optim.prob​lemdef.Opt​imizationE​xpression is not possible.

Can anyone please help!!! I am trying to solve an optimization problem using MILP (problem-based approach)
'r' and 'q' are optimization variables
The following error occurred converting from optim.problemdef.OptimizationExpression to double: Conversion to double from optim.problemdef.OptimizationExpression is not possible.
How can I fix it????
nt = 24;
nh= 20;
Pbcd = 5*ones(nt,1);
Eb = 5*ones(nt,1);
Ebinv = (1/98)*ones(nt,1);
Pbc = q.*Pbcd.*Ebinv;
Pbd = r.*Pbcd.*Ebinv;
socb = zeros(nt,1);
socb(1,1) = 1;
for i= 2:nt
socb(i,1) = socb(i-1,1) + Pbc(i,1) - Pbd(i,1);
end

3 个评论

Hi Matt,
Thanks for your response
The error is in 2nd last line
socb(i,1) = socb(i-1,1) + Pbc(i,1) - Pbd(i,1);
Before the 'end'
I have the same error in a similar problem. Did you manage to solve it?

请先登录,再进行评论。

回答(2 个)

Please add these lines immediately before the start of your for loop then run your code and show us what gets displayed. It will show us the types of your variables and make sure you haven't accidentally shadowed the built-in ones function with a version that performs some optimization calculations.
which -all ones
whos

2 个评论

This is what I got after running the code as suggested;
Error in MILP6 (line 133) socev(i,j) = socev(i-1,j) + o(i,j).*Pevcd(i,j).*Eevinv(i,j) - s(i,j).*Pevcd(i,j).*Eevinv(i,j);
built-in (C:\Program Files\MATLAB\R2017b\toolbox\matlab\elmat\ones) C:\Program Files\MATLAB\R2017b\toolbox\distcomp\parallel\@distributed\ones.m % Shadowed distributed method C:\Program Files\MATLAB\R2017b\toolbox\distcomp\parallel\@codistributor2dbc\ones.m % Shadowed codistributor2dbc method C:\Program Files\MATLAB\R2017b\toolbox\distcomp\parallel\@codistributor1d\ones.m % Shadowed codistributor1d method C:\Program Files\MATLAB\R2017b\toolbox\distcomp\parallel\@codistributed\ones.m % Shadowed codistributed method C:\Program Files\MATLAB\R2017b\toolbox\distcomp\gpu\@gpuArray\ones.m % Shadowed gpuArray method The following error occurred converting from optim.problemdef.OptimizationExpression to double: Conversion to double from optim.problemdef.OptimizationExpression is not possible.
Error in MILP6 (line 116) socb(i,1) = socb(i-1,1) + Pbc(i,1) - Pbd(i,1);
Name Size Bytes Class Attributes
Ba 24x1 192 double
Bb 24x1 192 double
Cbchr 24x1 464 optim.problemdef.OptimizationExpression
Cbchrtotal 1x1 464 optim.problemdef.OptimizationExpression
Cbdeg 24x1 464 optim.problemdef.OptimizationExpression
Cbdegt 24x1 464 optim.problemdef.OptimizationExpression
Cbdegtotal 1x1 464 optim.problemdef.OptimizationExpression
Cbdis 24x1 464 optim.problemdef.OptimizationExpression
Cbdistotal 1x1 464 optim.problemdef.OptimizationExpression
Ceh 24x20 3840 double
Cevceh 24x1 464 optim.problemdef.OptimizationExpression
Cevchr 24x1 464 optim.problemdef.OptimizationExpression
Cevchrtotal 1x1 464 optim.problemdef.OptimizationExpression
Cevdeg 24x20 464 optim.problemdef.OptimizationExpression
Cevdegt 24x1 464 optim.problemdef.OptimizationExpression
Cevdegtotal 1x1 464 optim.problemdef.OptimizationExpression
Cevdeh 24x1 464 optim.problemdef.OptimizationExpression
Cevdis 24x1 464 optim.problemdef.OptimizationExpression
Cevdistotal 1x1 464 optim.problemdef.OptimizationExpression
Ch 24x1 192 double
Chtotal 1x1 8 double
Cp 24x1 192 double
Cpv 24x1 192 double
Cpvtotal 1x1 8 double
Cs 24x1 192 double
Db 24x1 192 double
Dev 24x20 3840 double
EVa 24x20 3840 double
EVb 24x20 3840 double
Eb 24x1 192 double
Ebinv 24x1 192 double
Eev 24x20 3840 double
Eevinv 24x20 3840 double
Pbc 24x1 464 optim.problemdef.OptimizationExpression
Pbcd 24x1 192 double
Pbchr 24x1 464 optim.problemdef.OptimizationExpression
Pbchrt 1x1 464 optim.problemdef.OptimizationExpression
Pbd 24x1 464 optim.problemdef.OptimizationExpression
Pbdis 24x1 464 optim.problemdef.OptimizationExpression
Pbdist 1x1 464 optim.problemdef.OptimizationExpression
Pevc 24x20 464 optim.problemdef.OptimizationExpression
Pevcd 24x20 3840 double
Pevchr 24x1 464 optim.problemdef.OptimizationExpression
Pevchrt 1x1 464 optim.problemdef.OptimizationExpression
Pevd 24x20 464 optim.problemdef.OptimizationExpression
Pevdis 24x1 464 optim.problemdef.OptimizationExpression
Pevdist 1x1 464 optim.problemdef.OptimizationExpression
Pgt 1x1 464 optim.problemdef.OptimizationExpression
Ph 24x20 3840 double
Pht 1x1 8 double
Phtt 24x1 192 double
Ppv 24x1 192 double
Ppvt 1x1 8 double
a 24x20 3840 double
expr 24x1 192 double
i 1x1 8 double
j 1x1 8 double
nh 1x1 8 double
nt 1x1 8 double
o 24x20 8 optim.problemdef.OptimizationVariable
p 1x1 24 optim.problemdef.OptimizationProblem
q 24x1 8 optim.problemdef.OptimizationVariable
r 24x1 8 optim.problemdef.OptimizationVariable
rq 24x1 464 optim.problemdef.OptimizationExpression
s 24x20 8 optim.problemdef.OptimizationVariable
so 24x20 464 optim.problemdef.OptimizationExpression
socb 24x1 192 double
socbmax 1x1 8 double
socbmin 1x1 8 double
socev 24x20 3840 double
socevmax 1x1 8 double
socevmin 1x1 8 double
In addition, 'r' and 'q' are optimization variables Type - integer Lower bound - 0 Upper bound - 1

请先登录,再进行评论。

If you intend socb to be an optimization expression, then initialize it that way.
socb = optimexpr(nt,1); % Not zeros(nt,1)
socb(1,1) = 1;
Alan Weiss
MATLAB mathematical toolbox documentation

类别

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by