|
|
1
3
定义零件&产品(预编码)定义所有“零件”时,最重要的是确定零件的层次结构和分类。这是真的,因为某些规则可能是唯一部分所独有的 ,一些分类的 (例如“所有野马”) ,有些按类型分类 (例如“所有调味品”) 等 生成规则集(预编码)为每个独特的零件、类别、类型和成品定义规则集(先决条件、排除项等)。
这听起来可能有点傻,但必须非常小心,以确保规则的定义具有适当的范围。例如,如果成品是
在花了太多时间研究“零件”的独特/类别/类型规则之后,许多设计师将忽略仅适用于成品的规则,即使零件没有冲突。
这个规则图可能很快变得非常复杂。 关于构建数据结构(规范)的建议
编写你的算法(代码)
这一步的诀窍是如何在代码中实现沿树/图向上移动的规则——例如,当一个特定部分与其范围外的另一个部分发生问题时,或者当添加另一个部分时,如何运行其验证?我的想法是:
裸骨原型示例
又好又干净。 |
|
|
2
5
工厂车间构建周期过程包括预先检查,以确保订单在发布给构建者和测试者之前是可构建的。 其中一项检查确定订单的物料清单(BOM)是否符合工艺工程师指定的规则列表。例如,如果客户订购处理器,确保他们也订购了足够的直流转换器零件;或者,如果他们订购了一定数量的内存DIMM,请确保他们还订购了子板以容纳额外的容量。
作为一个副作用,该系统还为每个订单生成了构建文档,工人在构建每个系统时会提取这些文档。它还生成了构建后老化过程的预期测试结果,以便测试间隔可以引用它们并确定是否所有内容都正确构建。 |
|
|
3
4
亚当·戴维斯 :如果我理解正确,您打算开发某种系统,实际上可以用于购物车,帮助用户购买兼容部件。 问题定义
这是一个图形问题(
您需要能够(a)确定篮子中的每个项目是否满足篮子中另一个项目的要求(即RAM卡具有兼容的主板),(b)分配最合适的项目(即,如果主板的USB端口用完,将USB集线器分配给主板USB端口,将打印机分配给USB集线器,(c)为用户提供一个功能来查找满意的组件列表。也许USB集线器作为扩展总是可以优先使用(但一定要注意)。 您将需要的数据结构
您需要一个简单的分类系统,即H61M-VS
is-a
有一个
其次是分类和组合,您需要识别需求,这非常简单。现在,简单分类可以允许一个简单的SQL查询找到符合分类的所有项。 测试一个令人满意的篮子要测试篮子,需要创建一个配置,确定与哪个项目匹配(即主板的DDR3插槽与4GB Ram模块匹配,SATA HDD电缆连接到主板SATA端口和PSU的SATA电源电缆,而PSU的4针ATX 12V电源电缆连接到主板)。 最简单的事情就是检查是否存在另一个令人满意的项目 戴尔电脑配置器
你从一个项目开始,比如说处理器。处理器需要一块主板和一个风扇,因此您可以给它们选择主板(将处理器风扇添加到
|
|
|
4
2
作为一名程序员,我会做以下工作(尽管我在现实生活中从来没有这样做过):
如果将所有组合视为一个集合,那么异常只会删除该集合的成员。但是您不需要存储整个集合,只需要存储异常,因为您可以计算 大小 这一套很简单。 |
|
|
5
2
" Generating Functions “在解决这类问题时,作为一种结构出现在脑海中。我要注意的是,有几个不同的生成函数取决于你想要什么。 在北美,汽车牌照在计算所有排列时可能是一个有趣的组合问题,其中6或7的每个位置都有36个可能的值,这些值是车牌的长度,取决于获得车牌的位置。然而,有些组合是不合格的,因为其中一些组合中有脏话或种族主义词语,这使得问题稍微难一些。例如,有一个infamour N-word,它至少有两种不同的拼写,我认为这是不允许出现在车牌上的。 另一个例子是使用一个给定的字母表来确定单词的所有不同顺序,该字母表包含一些重复多次的项目。例如,如果一个人想要所有不同的方式来排列字母,就说“字母”这个词,它不仅仅是6个!这就是“abcdef”的情况,因为有两对字母,计算起来稍微有点困难。 |
|
|
6
1
您可能希望创建一个唯一表示单个配置的数据结构。然后,应以一种方式定义每个兼容性规则,使其能够生成一个包含所有未通过该规则的单个配置的集合。然后,您将使用所有规则生成的所有集合的并集来获得所有不符合规则的配置的集合。然后计算该集合的大小,并从集合的大小中减去所有可能的配置。 最困难的部分是定义数据结构的方式可以由您的规则生成,并且可以让集合操作在其上工作!这是给读者的练习,我什么都没有。 |
|
|
7
1
我现在唯一能想到的就是构建,如果你能构建一棵树,定义你有一个简单解决方案的部分之间的依赖关系。
这简单地说,你有2个面包选择(面包或没有面包),1个芝麻(只有当你有一个面包-表示依赖-如果你有一个7在这里它意味着7种类型,可以存在,如果你只有一个面包) 芥末酱3英镑。。等
|
|
|
8
1
也许可以将问题形式化为一个问题 k-sat problem . 在某些情况下,问题看起来是NP完全的,你必须列举所有的可能性来检查它们是否满足所有的条件。在其他一些情况下,问题将很容易解决(例如,当需要很少的条件时)。这是一个活跃的研究领域。你可以在谷歌学者网站上找到相关的参考资料。
对于芥末,您将为芥末类型添加一个二进制条目“芥末类型”,并引入以下条件:
对于芝麻选择,这一点更加明确:
因此,您提出的案例似乎属于2-sat系列问题。 |