DecoratedNetwork.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package ui.model;
  2. import java.util.ArrayList;
  3. import classes.HolonObject;
  4. import ui.model.DecoratedHolonObject.HolonObjectState;
  5. public class DecoratedNetwork {
  6. private ArrayList<Supplier> supplierList = new ArrayList<Supplier>();
  7. private ArrayList<Consumer> consumerList = new ArrayList<Consumer>();
  8. private ArrayList<Consumer> consumerSelfSuppliedList = new ArrayList<Consumer>();
  9. private ArrayList<Passiv> passivNoEnergyList = new ArrayList<Passiv>();
  10. public DecoratedNetwork(MinimumNetwork mm, int Iteration){
  11. //Categorize
  12. for(HolonObject hObject: mm.getHolonObjectList()) {
  13. float energyNeeded = hObject.getEnergyNeededFromConsumingElements(Iteration);
  14. float energySelfProducing = hObject.getEnergySelfProducingFromProducingElements(Iteration);
  15. if(energyNeeded < energySelfProducing) {
  16. Supplier sup = new Supplier(hObject);
  17. sup.setEnergyToSupplyNetwork(energySelfProducing - energyNeeded);
  18. supplierList.add(sup);
  19. } else if (energyNeeded > energySelfProducing) {
  20. Consumer con = new Consumer(hObject);
  21. con.setEnergyNeededFromNetwork(energyNeeded - energySelfProducing);
  22. con.setMinimumConsumingElementEnergy(hObject.getMinimumConsumingElementEnergy(Iteration));
  23. con.setEnergyFromConsumingElemnets(hObject.getEnergyNeededFromConsumingElements(Iteration));
  24. con.setEnergySelfSupplied(hObject.getEnergySelfProducingFromProducingElements(Iteration));
  25. consumerList.add(con);
  26. }else if(energyNeeded == energySelfProducing) {
  27. if (energySelfProducing == 0.0f) {
  28. Passiv pas = new Passiv(hObject);
  29. passivNoEnergyList.add(pas);
  30. } else {
  31. Consumer con = new Consumer(hObject);
  32. con.setEnergyNeededFromNetwork(0.0f);
  33. con.setMinimumConsumingElementEnergy(hObject.getMinimumConsumingElementEnergy(Iteration));
  34. con.setEnergyFromConsumingElemnets(hObject.getEnergyNeededFromConsumingElements(Iteration));
  35. con.setEnergySelfSupplied(hObject.getEnergySelfProducingFromProducingElements(Iteration));
  36. consumerSelfSuppliedList.add(con);
  37. }
  38. }
  39. }
  40. //Sort SupplierList according to the EnergyToSupplyNetwork maximum first.
  41. //Sort ConsumerList according to the MinimumConsumingElementEnergy minimum first.
  42. supplierList.sort((Supplier lhs,Supplier rhs) -> -Float.compare(lhs.getEnergyToSupplyNetwork(), rhs.getEnergyToSupplyNetwork()));
  43. consumerList.sort((Consumer lhs,Consumer rhs) -> Float.compare(lhs.getMinimumConsumingElementEnergy() , rhs.getMinimumConsumingElementEnergy()));
  44. //consumerList.forEach((con) -> System.out.println(con.getMinimumConsumingElementEnergy()));
  45. consumerList.forEach((con) -> System.out.println("AfterSorting" + con));
  46. //Minimum demand first:
  47. float energyToSupplyInTheNetwork = supplierList.stream().map(supplier -> supplier.getEnergyToSupplyNetwork() - supplier.getEnergySupplied()).reduce( 0.0f, (a, b) -> a + b);
  48. outerLoop:
  49. for(Consumer con : consumerList)
  50. {
  51. //gehe Supplier list durch wer ihn supplien kann.
  52. for(Supplier sup : supplierList) {
  53. float energyRdyToSupply = sup.getEnergyToSupplyNetwork() - sup.getEnergySupplied();
  54. if(energyRdyToSupply == 0.0f) continue;
  55. float energyNeededForMinimumConsumingElement=con.getMinimumConsumingElementEnergy()-con.getEnergyFromNetwork();
  56. if(energyNeededForMinimumConsumingElement>energyToSupplyInTheNetwork) {
  57. //Dont supply a minimumElement when you cant supply it fully
  58. break outerLoop;
  59. }
  60. if(energyRdyToSupply>=energyNeededForMinimumConsumingElement) {
  61. energyToSupplyInTheNetwork -= energyNeededForMinimumConsumingElement;
  62. supply(con, sup, energyNeededForMinimumConsumingElement);
  63. continue outerLoop;
  64. }else
  65. {
  66. energyToSupplyInTheNetwork -= energyRdyToSupply;
  67. supply(con, sup, energyRdyToSupply);
  68. }
  69. }
  70. //No more Energy in the network
  71. break;
  72. }
  73. consumerList.forEach((con) -> System.out.println("AfterSuppliing MinimumDemand" + con));
  74. //Sort ConsumerList according to the EnergyNeeded to supply fully after minimum Demand First.
  75. consumerList.sort((Consumer lhs,Consumer rhs) -> Float.compare(lhs.getEnergyNeededFromNetwork()-lhs.getEnergyFromNetwork() , rhs.getEnergyNeededFromNetwork()-rhs.getEnergyFromNetwork() ));
  76. //Supply consumer fully
  77. outerLoop:
  78. for(Consumer con : consumerList)
  79. {
  80. //gehe Supplier list durch wer ihn supplien kann.
  81. for(Supplier sup : supplierList) {
  82. float energyRdyToSupply = sup.getEnergyToSupplyNetwork() - sup.getEnergySupplied();
  83. if(energyRdyToSupply == 0.0f) continue;
  84. float energyNeededForFullySupply = con.getEnergyNeededFromNetwork() - con.getEnergyFromNetwork();
  85. if(energyNeededForFullySupply == 0.0f) continue;
  86. if(energyRdyToSupply>=energyNeededForFullySupply) {
  87. supply(con, sup, energyNeededForFullySupply);
  88. continue outerLoop;
  89. }else
  90. {
  91. supply(con, sup, energyRdyToSupply);
  92. }
  93. }
  94. //No more Energy in the network
  95. break;
  96. }
  97. consumerList.forEach((con) -> System.out.println("AfterFullySuplieing" + con));
  98. //If Energy Left Supply all equal
  99. //Count EnergyLeft
  100. float energyLeft = supplierList.stream().map(supplier -> supplier.getEnergyToSupplyNetwork() - supplier.getEnergySupplied()).reduce( 0.0f, (a, b) -> a + b);
  101. if(energyLeft > 0.0f && (consumerList.size() + consumerSelfSuppliedList.size() != 0))
  102. {
  103. float equalAmountOfEnergyToSupply = energyLeft / ((float)(consumerList.size() + consumerSelfSuppliedList.size()));
  104. outerLoop:
  105. for(Consumer con : consumerList)
  106. {
  107. //gehe Supplier list durch wer ihn supplien kann.
  108. for(Supplier sup : supplierList) {
  109. float energyRdyToSupply = sup.getEnergyToSupplyNetwork() - sup.getEnergySupplied();
  110. if(energyRdyToSupply == 0.0f) continue;
  111. float energyNeededToSupplyConsumerTheEqualAmount = equalAmountOfEnergyToSupply +con.getEnergyNeededFromNetwork()- con.getEnergyFromNetwork();
  112. if(energyRdyToSupply>=energyNeededToSupplyConsumerTheEqualAmount) {
  113. supply(con, sup, energyNeededToSupplyConsumerTheEqualAmount);
  114. continue outerLoop;
  115. }else
  116. {
  117. supply(con, sup, energyRdyToSupply);
  118. }
  119. }
  120. //No more Energy in the network
  121. break;
  122. }
  123. outerLoop:
  124. for(Consumer con : consumerSelfSuppliedList)
  125. {
  126. //gehe Supplier list durch wer ihn supplien kann.
  127. for(Supplier sup : supplierList) {
  128. float energyRdyToSupply = sup.getEnergyToSupplyNetwork() - sup.getEnergySupplied();
  129. if(energyRdyToSupply == 0.0f) continue;
  130. float energyNeededToSupplyConsumerTheEqualAmount = equalAmountOfEnergyToSupply +con.getEnergyNeededFromNetwork()- con.getEnergyFromNetwork();
  131. if(energyRdyToSupply>=energyNeededToSupplyConsumerTheEqualAmount) {
  132. supply(con, sup, energyNeededToSupplyConsumerTheEqualAmount);
  133. continue outerLoop;
  134. }else
  135. {
  136. supply(con, sup, energyRdyToSupply);
  137. }
  138. }
  139. //No more Energy in the network
  140. break;
  141. }
  142. }
  143. consumerList.forEach((con) -> System.out.println("AfterOverSuppleiing" + con));
  144. consumerSelfSuppliedList.forEach((con) -> System.out.println("AfterOverSuppleiing" + con));
  145. //CalculateStates:
  146. supplierList.forEach(sup -> sup.setState(HolonObjectState.PRODUCER));
  147. passivNoEnergyList.forEach(sup -> sup.setState(HolonObjectState.NO_ENERGY));
  148. for(Consumer con : this.consumerList)
  149. {
  150. setConsumerState(con);
  151. }
  152. for(Consumer con : this.consumerSelfSuppliedList)
  153. {
  154. setConsumerState(con);
  155. }
  156. }
  157. private void setConsumerState(Consumer con) {
  158. if(con.getEnergySelfSupplied() + con.getEnergyFromNetwork() > con.getEnergyFromConsumingElemnets()) {
  159. con.setState(HolonObjectState.OVER_SUPPLIED);
  160. }else if(con.getEnergySelfSupplied() + con.getEnergyFromNetwork() == con.getEnergyFromConsumingElemnets()) {
  161. con.setState(HolonObjectState.SUPPLIED);
  162. }else if(con.getEnergySelfSupplied() + con.getEnergyFromNetwork() >= con.getMinimumConsumingElementEnergy()) {
  163. con.setState(HolonObjectState.PARTIALLY_SUPPLIED);
  164. }else {
  165. con.setState(HolonObjectState.NOT_SUPPLIED);
  166. }
  167. }
  168. /**
  169. * No Checks.
  170. * @param con
  171. * @param sup
  172. * @param energy
  173. */
  174. private void supply(Consumer con, Supplier sup, float energy) {
  175. sup.getConsumerList().add(sup.new ConsumerListEntry(con , energy));
  176. sup.setEnergySupplied(sup.getEnergySupplied() + energy);
  177. con.getSupplierList().add(con.new SupplierListEntry(sup, energy));
  178. con.setEnergyFromNetwork(con.getEnergyFromNetwork() + energy);
  179. }
  180. public ArrayList<Supplier> getSupplierList() {
  181. return supplierList;
  182. }
  183. public ArrayList<Consumer> getConsumerList() {
  184. return consumerList;
  185. }
  186. public ArrayList<Consumer> getConsumerSelfSuppliedList() {
  187. return consumerSelfSuppliedList;
  188. }
  189. public ArrayList<Passiv> getPassivNoEnergyList() {
  190. return passivNoEnergyList;
  191. }
  192. }