Guest User

Untitled

a guest
Jan 21st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. name = 'generationcost.xlsx';
  2. poolPrice = xlsread(name,'AD3:AD50'); % Revenue in dollars per MWh in interval
  3. demand = xlsread(name,'AC3:AC52');
  4. month = numel(demand);
  5. e = xlsread(name,'W2:W4')'; %Cost for a unit of fuel
  6. fuelPrice = repmat(e,1,1,2);
  7. nPeriods = length(poolPrice);
  8. nGens = 3;
  9. genhigh = xlsread(name,'F2:F4');
  10. genlow = xlsread(name,'Q2:Q4');
  11. gen = [genlow(:),genhigh(:),]; %MW
  12.  
  13. fuel = [50,330;45,325;55,750]; % Fuel consumption for generator
  14. startCost = [10000;10000;10000]; %Cost in dollars to start a generator after it has been off
  15.  
  16. y = optimvar('y',nPeriods,nGens,{'Low','High'},'Type','integer','LowerBound',0,'UpperBound',1);
  17. z = optimvar('z',nPeriods,nGens,'Type','integer','LowerBound',0,'UpperBound',1);
  18.  
  19. powercons = y(:,:,'Low') + y(:,:,'High') <= 1;
  20.  
  21.  
  22. yFuel = zeros(nPeriods,nGens,2);
  23. yFuel(:,1,1) = fuel(1,1);
  24. yFuel(:,1,2) = fuel(1,2);
  25. yFuel(:,2,1) = fuel(2,1);
  26. yFuel(:,2,2) = fuel(2,2);
  27. yFuel(:,3,1) = fuel(3,1);
  28. yFuel(:,3,2) = fuel(3,2);
  29.  
  30. fuelUsed = sum(reshape((sum(y.*yFuel)),[3 2])');
  31. %fuelcons = fuelUsed <= totalFuel;
  32.  
  33. w = optimexpr(nPeriods,nGens);
  34. idx = 1:(nPeriods-1);
  35. w(idx,:) = y(idx+1,:,'Low') - y(idx,:,'Low') + y(idx+1,:,'High') -
  36. y(idx,:,'High');
  37. w(nPeriods,:) = y(1,:,'Low') - y(nPeriods,:,'Low') + y(1,:,'High') -
  38. y(nPeriods,:,'High');
  39. switchcons = w - z <= 0;
  40.  
  41. generatorlevel = zeros(size(yFuel));
  42. generatorlevel(:,1,1) = gen(1,1);
  43. generatorlevel(:,1,2) = gen(1,2);
  44. generatorlevel(:,2,1) = gen(2,1);
  45. generatorlevel(:,2,2) = gen(2,2);
  46. generatorlevel(:,3,1) = gen(3,1);
  47. generatorlevel(:,3,2) = gen(3,2);
  48.  
  49. revenue = optimexpr(size(y));
  50. for ii = 1:nPeriods
  51. revenue(ii,:,:) = poolPrice(ii)*y(ii,:,:).*generatorlevel(ii,:,:);
  52. end
  53.  
  54. val = optimexpr(size(y));
  55. demands = optimexpr(nPeriods,1);
  56. id = 1:nPeriods;
  57. val(id,:,:)= y(id,:,:).*generatorlevel(id,:,:);
  58. demands(id,:)= sum(sum(val,3),2);
  59. demandcons = demands-demand ;
  60.  
  61. fuelCost = sum(sum(fuelPrice.*sum(y.*yFuel)));
  62. startingCost = z*startCost;
  63.  
  64. profit = sum(sum(sum(revenue))) - fuelCost - sum(startingCost);
  65.  
  66. dispatch = optimproblem('ObjectiveSense','maximize');
  67. dispatch.Objective = profit;
  68.  
  69. dispatch.Constraints.powercons = powercons;
  70. dispatch.Constraints.demandcons = demands - demand <= 0 ;
  71.  
  72. options = optimoptions('intlinprog','Display','final');
  73. [dispatchsol,fval,exitflag,output] = solve(dispatch,'options',options);
  74.  
  75. subplot(5,1,1)
  76. bar(dispatchsol.y(:,1,1)*gen(1,1)+dispatchsol.y(:,1,2)*gen(1,2),.5,'g')
  77. xlim([.5,48.5])
  78. ylabel('MW')
  79. title('Generator 1 Optimal Schedule','FontWeight','bold')
  80. subplot(5,1,2)
  81. bar(dispatchsol.y(:,2,1)*gen(2,1)+dispatchsol.y(:,2,2)*gen(2,2),.5,'c')
  82. title('Generator 2 Optimal Schedule','FontWeight','bold')
  83. xlim([.5,48.5])
  84. ylabel('MW')
  85. subplot(5,1,3)
  86. bar(dispatchsol.y(:,3,1)*gen(3,1)+dispatchsol.y(:,3,2)*gen(3,2),.5,'c')
  87. title('Generator 3 Optimal Schedule','FontWeight','bold')
  88. xlim([.5,48.5])
  89. ylabel('MW')
  90. subplot(5,1,4)
  91. bar(demand,.5)
  92. xlim([.5,48.5])
  93. title('Daily Demand','FontWeight','bold')
  94. xlabel('Period')
  95. ylabel('MW')
  96.  
  97. starttimes = find(round(dispatchsol.z) == 1);
  98. [theperiod,thegenerator] = ind2sub(size(dispatchsol.z),starttimes)
Add Comment
Please, Sign In to add comment