d=binvar(10,10);
thevalue_at_PV_BAT = sum(sum(NPV.*d))
Model = [sum(sum(d))==1,sum(sum(d*(1:10)'))==PV,sum(sum((1:10)*d))==BAT]
Code doesn’t make sense. You are mixing the manual modelling strategy of indexing with decision variables (i.e. using d) with the other approach based on rewriting to indexing in a decision variable
dimn = 10;dimm = 20;intvar PV BATd = binvar(dimm,dimn);data = randn(dimm,dimn)*100;Model = [sum(sum(d)) == 1, sum(sum(d*(1:dimn)'))==PV ,sum(sum((1:dimm)*d))==BAT];objective = sum(sum(data.*d)) + PV^2+BAT^2optimize(Model,objective)
% Optimal objective from optimal indiciesdata(value(BAT),value(PV))+value(PV)^2+value(BAT)^2
% Compare with brute-force[pv,bat] = meshgrid(1:dimn,1:dimm);Z = pv.^2+bat.^2+data;min(min(Z))