0

こんにちは私はlinprog最適化のために次のコードを持っています。

for j = 1:2

 for i = 1:24
   for K = 1:3
      for M = 1:3

   PV_output(:,:,:) = real(PV_power_output(:,:,:));
         WT_output(:,:,:) =  WT_power_output(:,:,:);

         PVenergy = sum(sum(PV_output(:,:,1)));
         WTenergy = sum(sum(WT_power_output(:,:,1)));


          f= [((CRF*CC_PV)/PVenergy)+OM_PV; ((CRF*CC_WT)/WTenergy)+OM_WT];

         A(:,:,:) = [-PV_output(:,:,K) -WT_output(:,:,M)];


            b(:,:) = -Demand(j,i);

           lb = zeros(2,1);


           ub = [max_PV_area/PV_area max_WT_area/WT_area]';

      end
   end
  end
 end

            x(:,j,i,K,M) = linprog(f,A,b,[],[],lb,ub)

ここで、WT_outputとPV_outputは3次元の365x24配列であり、Demandは365x24です。

最適なKとMの組み合わせを見つけるために、Demandの365x24要素のそれぞれと各ディメンションのx1とx2を最適化しようとしています。

ただし、現在のコードでは、「Aの行数はbの要素数と同じである必要があります」というエラーが発生し続けます。

誰か提案はありますか?

4

2 に答える 2

0

のドキュメントにlinprogは、次のように記載されています。

x = linprog(f,A,b) は、最小 f'*x を A*x ≤ b となるように解きます。

したがって、明らかに A の行数は b の要素数と同じでなければなりません。A は行列であるのに対し、b はベクトルであるからです。

あなたの質問が「なぜ私は良いサイズを持っていないのですか?」間違いがどこにあるかを確認するために、各ステップでベクトル/行列のサイズを出力してみてください (たとえば、行列を転置するのを忘れることはよくあります)。

于 2012-06-17T23:16:33.260 に答える
0

あなたのワークスペースは、A と B のサイズについて何と言っていますか? ChrisJamesC そうですね..私もそうでした..操作中に行列を転置するのを忘れていました. ブレークポイントを配置して、各ステップでワークスペースをチェックしてみてください。それは役立つかもしれません

于 2012-06-18T05:55:43.193 に答える