我不确定这是否是正确的论坛,但我真的在寻求有关这方面的建议。
我们有一个过程决策引擎,这是相当初级的,用来决定应用程序的路由。它基本上是串联的多个if-else语句(其中大约有30个)。例如:
if (application.isBlue && (!configs.isBlueAllowed)) { return 1 } ....此外,我们还将介绍不同的标记和流。例如,如果应用程序包含标记blah,那么它应该跳过一些if-else语句,然后转到不同的处理中心。
我们天真的方法似乎已经达到了极限(当然我们可以更多地切换,但它既不优雅也不漂亮)。
假设这是正确的论坛,请您评论:
发布于 2018-09-09 08:30:09
这不是提出这个问题的正确方法。
我怀疑您真正想知道的是机器学习是否可以用于改进您的应用程序。有可能。可能不会。我不知道,因为这不是你要求的。
您要问的是,它是否可以改进“过程决策引擎”。这不是要求。这是一个实现。你是在告诉我们问题是怎么解决的,而不是问题是什么。
我相当肯定ML可以用来解决这个类的所有问题。ML可用于异或的求解。每当你需要一个异或时,你都会疯狂地接触到ML。
明白机器收益的力量并不在于它能解决逻辑问题。它可以找到解决逻辑问题的方法,而不需要人类来处理每一个环节。
30 if-else语句听起来可能听起来很多,如果组织得很糟糕,肯定是这样。但是机器学习是微不足道的。不过,这些信息还不足以打电话。
此外,我们还将介绍不同的标记和流。例如,如果一个应用程序包含标签blah,那么它应该跳过一些if-else语句,然后转到不同的处理中心。
这句话让我觉得你最有可能从引入好的老式分解和多态中获益。查找谓词是什么。如果您在一个过程中有30个if-else语句,其中许多语句需要跳过,那么您很可能在一个地方做了很多事情。分手吧。使许多功能和对象只接受他们所需要的,而不主动去学习他们自己的东西。让他们每人只做一件事。
但在进行所有这些重构之前,请编写一些测试,以证明这些东西的工作效果与以前一样好。这样,当你认为你的新设计和旧的设计一样的时候,你就会是对的。
现在已经有了一些测试和新的设计,是时候尝试为新的标记和流添加新的测试了。新的设计应该使添加它们更容易。
但是如果您想让我们评估ML是否是解决这个问题的好方法,那么我们需要更多的信息,然后是如何解决这个问题的。它究竟决定了什么?
发布于 2018-09-09 15:00:41
我们天真的方法似乎已经达到了极限(当然我们可以更多地切换,但它既不优雅也不漂亮)。
你能使用ML技术吗?是。
我认为您的问题是当输入{P}和计算引擎C变得太复杂时(“不优雅也不漂亮”)。当您有一个定义良好的输入{P}和输出{Q}时,可以使用ML技术获得C“免费”。
基本上,您需要做的是将您的“应用程序”、“信任”转换为具有数值的数据集,例如,布尔值表示"isBlue“、"isBlueAllowed”等,以及所需的“结果”。您必须为所有可能的配置和结果创建此数据集。这是需要得到紧密的拟合数据,所以结果将是确定性的。
此时,当您有这样的数据集时,计算引擎不需要是复杂的,也就是说,它可以像数据集和某个过滤器之间的逻辑计算一样简单,或者如果它更复杂,可以是一些涉及矩阵的操作。只要输出匹配{Q},我们可能不太关心这个计算是什么。
你的下一项工作是决定如何获得计算引擎C。老实说,会有很多,你必须自己测试才能做出决定。在这一点上,速度可能是最大的考虑因素。
问题是,您有一个决策树,您希望能够生成它,而不是更新代码。最流行的决策树生成器之一是C4.5。
将来当您需要添加另一个配置属性时,只需更新数据集,并更新您所选择的任何算法的模型。
整个过程就是如何应用ML,这并不难。如果要进行比较,则需要在维护培训数据集{P}与开发和维护一段软件之间进行比较。
https://softwareengineering.stackexchange.com/questions/378176
复制相似问题