在MQL5和MQL5云计算网络中,应该增加哪些内容来增加对通用数学计算的支持? - 页 7

 
帮助了解和解决这个问题。昨天我安装了MetaTrader 5代理管理器
在云计算中使用我的电脑
MQL5云计算网络。但问题来了,我在http://www.mql5.com 的账户没有显示代理商,这意味着我使用电脑不会被收费。我已经在MT5MetaTrader 5 代理管理器本身中输入了我的账户名称。
Скачать MetaTrader 5 Strategy Tester Agent для работы в сети MQL5 Cloud Network
Скачать MetaTrader 5 Strategy Tester Agent для работы в сети MQL5 Cloud Network
  • cloud.mql5.com
Подключайтесь к сети распределенных вычислений MQL5 Cloud Network и получайте дополнительный доход круглосуточно — пусть компьютер работает на вас!
 
Victuar:
但这里的问题是,在我的账户中,http://www.mql5.com,没有显示代理,这意味着使用我的PC,费用将不会滴下来。在MT5MetaTrader 5 代理管理器本身,我已经输入了我的账户名称。
如何阅读常见问题 -https://cloud.mql5.com/ru/faq
Вопросы по сети распределенных вычислений MQL5 Cloud Network
Вопросы по сети распределенных вычислений MQL5 Cloud Network
  • cloud.mql5.com
Часто задаваемые вопросы по MetaTester 5 Agents Manager
 
Renat:

因此,问题是--应该包括哪些其他功能来提高计费网格的能力?

可能是可以远程调用的类的方法,并从代理处获得其值:远程程序调用(RPC)。类似这样的事情。

remote:
   ...
   double f(int x);
   double y(doble a, double b, int[] &c);
   void z(double[] &arr);
   void func(SomeObject *so);
   ...

当然,伴随着方法的调用,我们需要将远程调用方法的对象的当前字段值传递给代理。

这个想法是,主类实例调用一些方法,在该方法中,其他类的实例被创建,它们向云端发送任务。结果被返回。

例如,一个任务是以计算几步象棋的形式创建的。在远程执行的主方法中,各种组合以某种类别的对象的形式创建了一招一式的计数并发送出去。反过来,如果该动作没有以结果结束,或者计算深度没有超过限制,则再次调用同一方法。诸如此类,不一而足。

 
her.human:

如果没有终端的参与,这是一件好事。

谁将为这个 "代理人之一 "产生数据?脚本或指标能够做到吗?

任何一个代理人都可以为其他代理人产生原始数据。可以通过fordcast向所有的或选定的代理发送。

任何代理将能够向任何其他代理发送数据帧。


代理人之间交流的目的是什么,如果可以的话,请启发一下无知的人。

用于需要交换先前计算的数据/ 结果的相关任务。

它不一定要在云中。你可以在当地做一个高速的代理网络,在上面运行一个有大量数据交换的复杂任务。

因此,你可以在没有任何超级计算机的情况下建立一个强大的计算网络。

 
Reshetov:

可能是可以远程调用的类方法,并从代理处获得其值。类似这样的事情。

当然,在这里,随着方法的调用,我们必须把远程调用这个方法的对象的当前字段值也传递给代理。

不,唯一可行的、现实的选择是交换数据框架。远程执行功能并不严重,因为没有人在正常情况下会复制信息环境。

作为框架 工作的一部分,其功能可以得到扩展。

bool  FrameSend(const long    agent,       // номер агента, или BROADCAST
                const string  name,        // публичное имя/метка
                const long    id,          // публичный id
                const double  value,       // значение
                const string  filename     // имя файла с данными
               );

以防万一,供参考。

网络延迟的代价是,为了优化整个过程,你应该对结果进行明确的批处理,并尽可能不频繁地传输数据。例如,如果有一个100,000,000次的高速(在几分之一秒内)数学问题,最好是立即以1,000-10,000次的部分进行算法优化,并编写批处理代码,结果分批返回。这将比100,000,000的回报有巨大的优势,因为大量的时间将花在网络上。

就我们而言,在高速任务的情况下,我们自己通过对每个代理进行几十或几百次的批量输出,以及对响应进行批量处理,来认真帮助。这给网络传输带来了巨大的节省,并使网络延迟降到最低。

 
Renat:

不,唯一可行的、现实的选择是交换数据框架。远程执行功能并不严重,因为正常人不会复制一个信息环境。

并非所有的任务都可以打包,因为在一些应用和资源非常密集的任务中,结果可能是唯一的,或者根本检测不到,徒劳的任务会被沿途丢弃,也就是说,丢失的结果甚至不应该被返回。

那么还有另一种方法可以做到。即,主任务在其一侧生成任务,将其告知代理。而代理用任务调用远程方法,进行计算,如果得到结果,就调用远程方法返回结果。

例如,任务:寻找费马数的素数除数。也许根本就没有结果,或者有一个,或者有几个。问题是,搜索这些非常有潜力的除数是一项非常耗费资源的任务,因为首先你需要创建一个大数形式的对象(在任务中你可以只指定两个数字作为整数:质数和尾数,以减少信息传输的成本)。然后检查数字是否为质数(运行一个简化测试,会发现90%以上的数字都不是质数)。然后,如果成功地通过了简单性测试,在循环中,将模数平方化寻找一个匹配。如果循环结束前的条件不一致,那么就不会有结果,也就没有东西可以返回。在这种情况下,代理必须通过远程调用主机应用程序的适当方法来远程请求下一个作业。如果它找到了结果,它必须调用另一个方法并传递相同的结果。

也就是说,任务是不同的,框架结构并不适合所有人。而上述例子中的网络延迟成本也是可以忽略不计的,因为一个任务就是把两个整数传给一个代理。

 
Reshetov:

并非所有的任务都可以被捆绑,因为在一些应用和资源非常密集的任务中,可能只有一个结果或根本没有结果,没有结果的任务会随着游戏的进行而被丢弃,也就是说,缺少的结果甚至不需要返回

如果使用框架方案,只要不向 "服务器代理 "返回空的结果,或者只返回 "计算出的数据包,没有数据 "的标志。

你知道框架模式是如何工作的吗?EA头在终端窗口中直接启动,等待来自远程代理的响应(数据帧)。也就是说,服务器部分坐在图表上,接收数据并能将任何东西可视化。

自己阅读和尝试:https://www.mql5.com/ru/code/914

注意: 视频应重新上传

Пример обработки результатов оптимизации в тестере стратегий
Пример обработки результатов оптимизации в тестере стратегий
  • 投票: 24
  • 2012.06.11
  • MetaQuotes Software Corp.
  • www.mql5.com
Пример визуализации результатов тестирования (динамика кривой баланса и статистические характеристики торгового советника) в процессе оптимизации.
 
Renat:

如果使用框架方案,只要不向 "服务器代理 "返回空结果即可。

嗯,这只是基础。主要的任务,计算量非常大,是递归的。而云计算并不打算用于此类任务,因为它只为全面搜索而设计。在许多应用任务中,我们不使用蛮力,因为它没有观点。递归任务对于深度和宽度以及深度和宽度的搜索是必要的。例如,分子的合成。即在游戏过程中建立一棵潜在解决方案的树,每个分支都是计算资源密集型的。但并不是每个分支机构都是有效的。即搜索在某处停止,但同时在深度或宽度上继续搜索其他潜在分支。

完全搜索实际上从未在任何地方使用过,因为对于大多数应用任务来说,它不会花费足够的时间来找到一个解决方案(例如分析国际象棋走法的问题)。但是,带有切断非预期解分支的递归方法给出了高速度,特别是在分布式计算 中。这就是为什么如果你想把应用工程师吸引到云上,你应该根据他们的任务来调整云,而不是认为他们会抛开一切,不顾他们的观点,一味地尝试所有的变体。对他们来说,创建自己的分布式计算网络会更容易,即使它在千兆位数方面的速度较低,计算机数量较少,但它会更有效率,因为它只在有希望的方向搜索,并且会比云计算网络更快地找到需要的解决方案。而许多编程语言都有这方面的工具箱,即现成的RPC实现。

例如,同样是寻找费马数的素数除数,可以分解成若干子任务。主应用程序生成的任务。下一层创建对象,并从其余任务中对它们进行快速的简单性检查。下一层寻找条件,即是否找到一个费马数的除数。工作机会再次从发现的数字中产生。下一层进行完全的简单性检查,如果数字不是质数,就会产生作业。如果是质数,它就把结果返回给主程序。下一层对费马数的非单纯除数进行因式分解,并从中为上一层生成工作。

这就形成了一个传送带,每个层的代理人都在这里执行他们的任务。目前还不清楚是否会发现这个结果。重要的是,明知无望进一步寻找解决方案的数字被丢弃在传送带上。换句话说,它节省了大量的计算资源,而不是试图在没有希望的任务上堆积数以千计的代理,并试图将它们磨碎。

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
Reshetov:

这只是基础。主要任务是递归的,计算起来非常耗费资源。而云计算并不打算用于此类任务,因为它只为全面搜索而设计。在许多应用任务中,我们不使用蛮力,因为它没有观点。递归任务对于深度和宽度以及深度和宽度的搜索是必要的。例如,分子的合成。即在游戏过程中建立一棵潜在解决方案的树,每个分支都是计算资源密集型的。但并不是每个分支机构都是有效的。即在某处停止搜索,但同时在深度或宽度上继续搜索其他潜在分支。

以1,000-10,000次为单位进行批量计算,并只返回重要的结果。这是一种非常有效的算法技术。

我在上面专门写了这一点。


完全搜索几乎从未被使用过,因为对于大多数应用问题来说,它不会花费足够的时间来找到一个解决方案(例如,一个国际象棋游戏的移动分析问题)。但是,带有切断非预期解分支的递归方法给出了高速度,特别是在分布式计算 中。这就是为什么如果你想把应用工程师吸引到云上,你应该根据他们的任务来调整云,而不是认为他们会抛开一切,不顾他们的观点,一味地尝试所有的变体。对他们来说,创建自己的分布式计算网络会更容易,即使它在千兆位数方面的速度较低,而且计算机数量较少,但它的效率更高,因为它只在有希望的领域进行搜索,而且会比云计算网络更快地找到所需的解决方案。而许多编程语言都有这方面的工具箱,即现成的RPC实现。

例如,同样是寻找费马数的素数除数,可以分解成若干子任务。主应用程序生成的任务。下一层创建对象,并从其余任务中对它们进行快速的简单性检查。下一层寻找条件,即是否找到一个费马数的除数。任务又是由找到的数字组成的。下一层进行完全的简单性检查,如果数字不是质数,就会产生作业。如果是质数,它就把结果返回给主程序。下一层对费马数的非素数除数进行因子化,并为上一层生成工作。

请阅读以上关于数据交换和演示示例的内容。

  1. 你已经有了一个控制代理工作的主流程。它坐落在一个图表上,接受来自代理商的框架(大型定制尺寸)。
  2. 主程序已经可以检索、可视化、处理和保存所产生的自定义数据。

提出了对数据交换的进一步扩展,以便主进程可以额外地将任何额外的自定义数据传递给任何代理。因此,有可能分部分阅读,将新的自定义条件发放给远程代理。因此,它可以以任何方式阅读,每次都会改变条件。

还有一个可能的扩展,当代理不仅可以从主站接收任务,还可以相互交换数据。当然,你可以通过向导来做(如果有大量的数据,这可能会非常慢),但直接通过云服务器来做会更有效率和速度。

 

Renat:

另一个可能的扩展是,代理不仅可以从向导那里接收任务,而且还可以在他们之间传输数据。当然,你可以通过向导来做这件事(如果有大量的数据,这可能会很慢),但直接通过云服务器来做这件事,效率更高,速度更快。

这就是我们所需要的,即从一个代理到另一个代理的递归数据传输,没有向导,但保证将结果返回给主人。因此,代理不能接受一项任务,并在没有完成任务的情况下停止工作,例如,因为计算机被关闭,潜在的有效解决方案的分支被破坏。

即,例如,分析一盘棋的任务。向导安排棋子并为现在要移动的棋子的颜色生成任务,即一个棋子--一个任务。每个代理人在收到自己棋子的任务后,在棋子不能移动的情况下,丢弃没有希望的变体,以便进一步分析,并形成新的阵型,作为敌方棋子的任务传递出去。以此类推,直到交配或僵持或超过搜索深度。

如果这种任务被委托给当前的云计算实施,那么你只能生成任务包进行全面搜索。而云没有足够的代理,向导也不可能有足够的内存来批处理所有这些工作。因为没有筛选出没有希望的变体的机制。因为随着每一个新的分析棋子的移动,任务的数量呈指数增长,但也有相当一部分被丢弃,不会产生无意义的任务,就像在完全过剩的情况下。而人们只有在潜入到决策树的某个深度或宽度之后才能发现透视的问题。而这个云计算实现的深度是1,即从主站到代理站再到主站。

我的观点是这样的。对于交易来说,实施递归搜索,砍掉没有希望的分支也是必要的。更好的做法是,不仅要寻找一个单一的极值,还要寻找一组局部极值(确实有很多)。而所有可能的变体的搜索空间是一个天文数字,也就是说,从所有分布式计算网络中抽取的代理都不够。为了做到这一点,在每一步,我们列举一个点(点坐标--EA的输入参数)的最近邻,与它有一定的距离,并间隔一定的角度值,看它们与当前的结果相比是否有改进。如果其中任何一个更差或超过了搜索深度,我们就放弃它们。如果他们有所改进,我们就会递归地进一步寻找,并从改进的点中形成一组进一步的任务,然后分发给代理人。如果在本地找到了极值(附近的所有点都只会使当前的结果恶化),我们会将结果返回给主程序。一旦确定了极值,它们就会被交给向导,并使用正向测试进行进一步分析。

这样的任务是无法直接解决的,因为变体的数量是天文数字。遗传算法也不寻找局部极值(它在紧邻的全局极值附近也会停止),只显示中间结果,不管它们的极值是什么。不是说遗传算法和蛮力算法的搜索空间是有限的和离散的。它是对最大数量的局部极值的搜索,但速度很快,即切断了从主站到代理站和从代理站到其他代理站的非预期任务的生成,而且范围不受限制(但如果需要,可以设置限制,例如在这种算法中搜索深度总是有限的)。如果云计算实现了递归作业转移,这个问题就会得到解决。