Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. public class SocketProbability {
  2.  
  3. public static int MAX_SOCKETS = 5; // 5 to max socket
  4. public static int DOMAIN = 10; // 10 different sockets
  5. public static double SOCKET_PROBABILITY = 0.1; // 1/10 chance for one specific socket
  6.  
  7. public static void main(String[] args) {
  8.  
  9. System.out.print(" ");
  10. for (int i = 1; i <= MAX_SOCKETS; i++) {
  11. System.out.print(i + " ");
  12. }
  13. System.out.println();
  14. for (int i = 0; i < 50; i++) {
  15. System.out.print("-");
  16. }
  17. System.out.println();
  18. for (int i = 30; i <= 120; i = i + 5) {
  19. System.out.print(" " + i + " ");
  20. for (int j = 1; j <= 4; j++) {
  21. System.out.print(String.format("%.3f", socketProbability(i, j)) + " ");
  22. }
  23. System.out.println();
  24. }
  25.  
  26. }
  27.  
  28. public static double socketProbability(int copies, int slots) {
  29. return 1 - inclusionFormula(copies, slots);
  30. }
  31.  
  32. private static double inclusionFormula(int copies, int slots) {
  33. double probability = 0;
  34. for (int i = 0; i < slots; i++) {
  35. probability += unionSize(MAX_SOCKETS, copies) / Math.pow(DOMAIN, copies);
  36. }
  37. // probability now: P({Y0 = 0}) + P({Y0 = 1}) + P({Y0 = 2}) + P({Y0 = 3}) + P({Y0 = 4}) + P({Y1 = 0}) + ... + P({Yi = 4})
  38. // now subtract intersection sizes
  39. int prefix = 1;
  40. for (int i = 0; i < slots * MAX_SOCKETS; i++) {
  41. prefix = (int) Math.pow(-1, i);
  42. probability = probability + (prefix * probabilityOfIntersectionsSum(i + 1, copies, slots));
  43. }
  44. return probability;
  45. }
  46.  
  47. private static double probabilityOfIntersectionsSum(int intersectionCount, int copies, int slots) {
  48. // base lists
  49. List<Map<String, Integer>> Yis = new ArrayList<Map<String, Integer>>();
  50. for (int i = 0; i < slots; i++) {
  51. for (int j = 0; j < MAX_SOCKETS; j++) {
  52. Map<String, Integer> randomVariable = new HashMap<String, Integer>();
  53. randomVariable.put("Y", i);
  54. randomVariable.put("x", j);
  55.  
  56. Yis.add(randomVariable);
  57. }
  58. }
  59.  
  60. // create sublists based on intersectionCount
  61. List<List<Map<String, Integer>>> sublists = new ArrayList<List<Map<String, Integer>>>();
  62. permutation(Yis, sublists, intersectionCount, new ArrayList<Map<String, Integer>>(), 0);
  63.  
  64. double intersectionProbabilitySum = 0; // P({Ai1 n ... n Aik}) for 0 <= i1 < ... < ik <= n
  65. for (int i = 0; i < sublists.size(); i++) {
  66. if (sublists.get(i).size() <= 1) {
  67. return 0;
  68. }
  69.  
  70. intersectionProbabilitySum += intersectionProbability(copies, sublists.get(i));
  71. }
  72.  
  73. return intersectionProbabilitySum;
  74. }
  75.  
  76. private static double intersectionProbability(int copies, List<Map<String, Integer>> list) {
  77. // check first if intersection over same random variable with different realization => intersection is empty
  78. Set<Integer> is = new HashSet<Integer>();
  79. int reservedDomains = list.size();
  80. int reservedDimensions = 0;
  81. for (int i = 0; i < list.size(); i++) {
  82. if (is.contains(list.get(i).get("Y"))) {
  83. // intersection over same random variable is empty set
  84. return 0;
  85. } else {
  86. reservedDimensions += list.get(i).get("x");
  87. is.add(list.get(i).get("Y"));
  88. }
  89. }
  90.  
  91. // fixed positions for fixed results
  92. double fixedDistributedPossibilities = 1;
  93. int temp = reservedDimensions;
  94. for (int i = 0; i < list.size(); i++) {
  95. if (temp >= 2) {
  96. fixedDistributedPossibilities = fixedDistributedPossibilities * coefficient(temp, list.get(i).get("x"));
  97. temp -= list.get(i).get("x");
  98. }
  99. }
  100.  
  101. return (fixedDistributedPossibilities * coefficient(copies, reservedDimensions) * Math.pow(DOMAIN - reservedDomains, copies - reservedDimensions)) / Math.pow(DOMAIN, copies);
  102. }
  103.  
  104. // cardinality possibilities for P({X < x}) <=> P({X = 0} u {X = 1} u ... u {X = x - 1})
  105. public static double unionSize(int x, int dimensions) {
  106. double possibilities = 0;
  107. for (int i = 0; i < x; i++) {
  108. possibilities += coefficient(dimensions, i) * Math.pow(DOMAIN - 1, dimensions - i);
  109. }
  110. return possibilities;
  111. }
  112.  
  113. public static double binomialProbability(int copies, int socket_ups) {
  114. double prob = 0;
  115. double result = 0;
  116. for (int i = socket_ups; i < copies; i++) {
  117. result = binomial(copies, i);
  118. prob += result;
  119. }
  120. return prob;
  121. }
  122.  
  123. public static double binomial(int copies, int socket_ups) {
  124. return coefficient(copies, socket_ups) * Math.pow(SOCKET_PROBABILITY, socket_ups)
  125. * Math.pow((1 - SOCKET_PROBABILITY), copies - socket_ups);
  126. }
  127.  
  128. public static double coefficient(double n, double k) {
  129. if (k == 0) {
  130. return 1;
  131. } else if (k > n || k < 0 || n < 0) {
  132. return 0;
  133. } else {
  134. double denominator = facculty(n, n - k + 1);
  135. double counter = facculty(k, 1);
  136.  
  137. return denominator / counter;
  138. }
  139. }
  140.  
  141. public static double facculty(double start, double end) {
  142. if (start > end) {
  143. return start * facculty(start - 1, end);
  144. } else {
  145. return end;
  146. }
  147. }
  148.  
  149. public static void permutation(List<Map<String, Integer>> originalList, List<List<Map<String, Integer>>> subLists, int sublistSize, List<Map<String, Integer>> currentSubList, int startIndex) {
  150. if (sublistSize == 0) {
  151. subLists.add(currentSubList);
  152. } else {
  153. sublistSize--;
  154. for (int i = startIndex; i < originalList.size(); i++) {
  155. List<Map<String, Integer>> newSubList = new ArrayList<Map<String, Integer>>(currentSubList);
  156. newSubList.add(originalList.get(i));
  157. permutation(originalList, subLists, sublistSize, newSubList, i + 1);
  158. }
  159. }
  160. }
  161.  
  162. public static void toString(List<List<Map<String, Integer>>> inputList) {
  163. System.out.println(inputList.size());
  164. System.out.print("(");
  165. for (int i = 0; i < inputList.size(); i++) {
  166. System.out.print("(");
  167. for (int j = 0; j < inputList.get(i).size(); j++) {
  168. System.out.print("{Y" + inputList.get(i).get(j).get("Y"));
  169. System.out.print(" = " + inputList.get(i).get(j).get("x") + "}");
  170. }
  171. if (i == inputList.size() - 1) {
  172. System.out.print(")");
  173. } else {
  174. System.out.print("), ");
  175. }
  176. }
  177. System.out.println(")");
  178. }
  179.  
  180.  
  181.  
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement