【问题标题】:Use python-boto and EC2 to brute force使用 python-boto 和 EC2 进行暴力破解
【发布时间】:2018-12-22 21:34:26
【问题描述】:

作为练习,我想使用 EC2/python-boto 进行一些科学计算和蒙特卡洛模拟。

例如,假设我有一些小计,例如:

a = [53067,
    45412,
    35238,
    34972,
    31551,
    29258,
    28550,
    28044,
    25485,
    21905,
    21597,
    21403,
    20536,
    20013,
    18338,
    17832,
    17186,
    16416,
    14682,
    14595]

然后是一个参差不齐的值列表,代表每月数据(12 个月,每月 20 个值):

b = [[7043,4567,4386,4247,4426,4562,4107,2986,4022,4733,4738,3295],
    [6090,4396,4382,4201,4409,3960,3315,2342,3034,3762,3858,2597],
    [4445,3525,3432,3338,3396,3134,2774,2205,2909,3682,3415,2457],
    [3998,3037,3203,2952,3122,2743,2564,2165,2904,3217,3324,2141],
    [3438,2762,2975,2817,2401,2489,2479,1975,2811,3107,2862,2130],
    [3027,2588,2865,2376,2392,2326,2327,1911,2383,2918,2646,2078],
    [2878,2323,2861,2294,2289,2206,2179,1863,2340,2829,2312,1560],
    [2862,2289,2853,2258,2256,2142,2021,1653,2164,2705,2308,1470],
    [2727,2046,2452,1972,2214,2117,1868,1569,2098,2436,2284,1462],
    [2664,2007,2005,1970,2145,1799,1825,1482,1971,2285,2053,1417],
    [2575,1987,1972,1865,1808,1780,1822,1391,1792,2161,1962,1411],
    [2417,1979,1957,1675,1783,1778,1795,1334,1767,2057,1928,1396],
    [2225,1860,1774,1631,1743,1762,1713,1315,1762,1921,1732,1391],
    [2152,1700,1760,1624,1722,1489,1694,1228,1722,1790,1648,1315],
    [2053,1621,1740,1533,1618,1445,1440,1119,1377,1598,1585,1299],
    [2033,1485,1607,1422,1469,1273,1415,1036,1314,1547,1534,1286],
    [1887,1452,1478,1361,1434,1265,1410,994,1194,1437,1482,1248],
    [1865,1357,1475,1274,1297,1210,1285,977,1060,1432,1470,1119],
    [1686,1276,1421,1224,1218,993,1128,877,1020,1419,1323,1013],
    [1536,1184,1405,1169,1211,938,1089,785,960,1299,1224,979]]

我想使用 boto 强制解决以下问题:对于 a 的每个值,找到一条经过几个月的路径,该路径将在 a 中给出小计。

例如第一个值53067通过取:

[7043, 4567, 4382, 4202, 4426, 4563, 4108, 2987, 4023, 4733, 4739, 3295]

这实际上是一个很难解决所有小计的问题,这就是为什么我想借此机会学习如何使用 EC2 暴力破解它,因为我可以重用它来进行蒙特卡罗模拟。

我找到了很多关于如何连接和存储数据的教程,但我没有看到任何新手可以理解的分布式计算。

【问题讨论】:

    标签: python amazon-ec2 boto


    【解决方案1】:

    您可能希望使用 EMR(Elastic Map Reduce)来运行您的计算(主要是 hadoop)。如果作业需要大量处理能力,您可以使用 boto 创建一个相当大的集群。

    然后你可以用 python 编写你的工作(假设你使用的是 python)。有很多关于如何在 python 中编写 map reduce 作业的教程。例如:http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

    之后,您可以将您的 python 作业发送到您刚刚创建的 EMR 集群并等待结果。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以将案例分解为单独的数组,然后在不同的机器上运行每组案例。这就是我正在使用我的飞行模拟器代码所做的。在我的地下室有两台电脑,我可以远程桌面进入。我在主桌面上运行三分之一的机箱,在每台地下室计算机上运行三分之一。您可以同时运行单独的实例以增加给定机器上的吞吐量。编写利用 GPU 内核的代码是下一个级别(我还没有)。如果你真的想成为蒙特卡罗之神,那可能是正确的道路..

      这里有一个简单的 Python 暴力组合解决方案。

      index_save = index
      for input1 in [0.1,0.2,0.3,...]
          for input2 in [10,20,30,...]
              for input3 in [-0.1,-0.2,-0.3,...]
                  index = index_save  #To reset the index and thus all arrays
                  while True:
                      index = index + 1
                      f[index] = *Function of inputs*
                      result = *Function of f and inputs*
                      if condition_met = true
                          break
                  if result > result_best
                      result_best = result # Save optimal result
                      inputs_best = [input1,input2,input3] # Save optimal input case
      

      How to use nested for loops for brute forcing combinations - Python

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多