Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Oracle SQL作为匹配引擎_Sql_Oracle_Mathematical Optimization_Iteration - Fatal编程技术网

使用Oracle SQL作为匹配引擎

使用Oracle SQL作为匹配引擎,sql,oracle,mathematical-optimization,iteration,Sql,Oracle,Mathematical Optimization,Iteration,我不确定我要找的东西是否可能,但思考起来肯定很有趣。我的目标是优化仓库的布局,但这个问题可以重新应用于其他场景 我有一个位置列表、到门的距离以及它们所在的区域(例如,区域a=冷藏,区域B=环境): 位置区距离 A1 A 1 A2 A 3 A3 A 5 A4 A 7 B1 B 2 B2 B 4 B3B6 B4 B 8 我还有一份产品清单,它们被挑选的次数和它们的区域(区域a=需要冷藏的产品,区域B=需要冷藏的产品,区域a/B=没有限制的产品) 每日产品区挑选 挤牛奶 生菜A/B 7 面包B6 巧克

我不确定我要找的东西是否可能,但思考起来肯定很有趣。我的目标是优化仓库的布局,但这个问题可以重新应用于其他场景

我有一个位置列表、到门的距离以及它们所在的区域(例如,区域a=冷藏,区域B=环境):

位置区距离 A1 A 1 A2 A 3 A3 A 5 A4 A 7 B1 B 2 B2 B 4 B3B6 B4 B 8 我还有一份产品清单,它们被挑选的次数和它们的区域(区域a=需要冷藏的产品,区域B=需要冷藏的产品,区域a/B=没有限制的产品)

每日产品区挑选 挤牛奶 生菜A/B 7 面包B6 巧克力B5 番茄A/B 4 干面食B3 牛肉A 2 鸡A 1 如果我只对优化挑选产品的行程感兴趣,我会把挑选最多的放在离门最近的地方。我通过两个表的行号和顺序(按距离和拾取)连接了这两个表

然而,我真的很关心产品区,因为我不能把我的面包存放在冷藏区(它可能会湿透)。此外,我知道生菜可以储存在冷藏或非冷藏区

此外,应该有一个条件确保所有产品都分配了一个空间(8个空间8个产品)

手动操作会让我感觉很舒服

Location Zone Distance Product Zone Pick per day A1 A 1 Milk A 8 B1 B 2 Lettuce A/B 7 A2 A 3 Tomatoes A/B 4 B2 B 4 Bread B 6 A3 A 5 Beef A 2 B3 B 6 Chocolate B 5 A4 A 7 Chicken A 1 B4 B 8 Dry Pasta B 3 位置区域距离每天的产品区域拾取 A1 A 1牛奶A 8 B1 B 2生菜A/B 7 A2 A 3番茄A/B 4 B2 B 4面包B 6 A3 A 5牛肉A 2 B3B6巧克力B5 A4 A 7鸡A 1 B4 B8干面食B3 我已经查看了SQL模式匹配,但没有成功。此外,我还编写了一个迭代VBA函数,该函数在区域中使用“保留”空间,但这对于家用PC来说会变慢


最后,谢谢!我一直在读stackoverflow上的帖子来解决我所有的问题,但是这个问题我解决不了

a。从以下sql开始:

选择*
从产品p左外连接位置l打开(仪表(p区,l区)>0)
p.pickperday desc订购,l.distance asc订购

b。编写一个存储过程,其中

  • 创建哈希集
  • 在结果集上开始循环
  • 取当前元素,如果它在hashset中不是allready,并且location在hashset中也不是allready,则将其插入hashset
  • 返回hashsetlist
  • 如何执行这些程序:

    对于测试:

    CREATE TABLE "PRODUCT" (    "PRODUCT" VARCHAR2(20), "ZONE" VARCHAR2(20), "PICKPERDAY" VARCHAR2(20));
    CREATE TABLE "LOCATION" (   "LOCATION" VARCHAR2(20), "ZONE" VARCHAR2(20), "DISTANCE" VARCHAR2(20));
    
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A1','A','1');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B1','B','2');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A3','A','5');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B2','B','4');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A2','A','3');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B3','B','6');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B4','B','8');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A4','B','2');
    
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Milk','A','8');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Tomatos','A/B','4');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Bread','B','6');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Dry Pasta','B','3');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Lettuce','A/B','7');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Beef','A','2');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Chocolate','B','5');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Chicken','A','1');
    

    您没有存储足够的数据。如果物品需要冷藏,则必须存储该数据。如果一个区域是冷藏的,也必须储存。隔离是按区域进行的(a到a,B到B,a/B到a或B)。这就是你的意思吗?我听说过的任何一家超市都会把牛奶藏在离前门尽可能远的地方。哦,等等……你说的是仓库好问题,请向上投票。我喜欢你的想法,这种方法将确保产品按照区域限制分配到某个位置,并使用“按pickperday排序”和“按距离排序”来完成优化。然而,在某些情况下(并非如此不幸),可能会有产品最终没有空间,因为灵活的产品占据了所有的位置。例如,生菜和西红柿在A1和A2中,剩余的“A区”位置(2)不足以容纳剩余的“A区”产品(3)牛奶牛肉和鸡肉。有什么想法吗?谢谢,我会:1。计算每个区域所需的空间:a `选择区域,按区域从产品组中计算(区域);和b
    选择区域,按区域从位置组中计数(区域)2。使用单独的hashmap增强检查;使用zone作为键和zonevalue b-a->中的diff值如果您得到一个指定了多个区域的产品,您可以检查该区域上是否有剩余空间,如果您在“Spacehashset”中插入这样的元素,是否可以使用递归查询而不是编写Java来完成此操作?
    Location    Zone    Distance    Product     Zone    Pick per day
    A1          A       1           Milk        A       8
    B1          B       2           Lettuce     A/B     7
    A2          A       3           Tomatoes    A/B     4
    B2          B       4           Bread       B       6
    A3          A       5           Beef        A       2
    B3          B       6           Chocolate   B       5
    A4          A       7           Chicken     A       1
    B4          B       8           Dry Pasta   B       3
    
    CREATE TABLE "PRODUCT" (    "PRODUCT" VARCHAR2(20), "ZONE" VARCHAR2(20), "PICKPERDAY" VARCHAR2(20));
    CREATE TABLE "LOCATION" (   "LOCATION" VARCHAR2(20), "ZONE" VARCHAR2(20), "DISTANCE" VARCHAR2(20));
    
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A1','A','1');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B1','B','2');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A3','A','5');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B2','B','4');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A2','A','3');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B3','B','6');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('B4','B','8');
    Insert into LOCATION (LOCATION,ZONE,DISTANCE) values ('A4','B','2');
    
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Milk','A','8');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Tomatos','A/B','4');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Bread','B','6');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Dry Pasta','B','3');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Lettuce','A/B','7');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Beef','A','2');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Chocolate','B','5');
    Insert into PRODUCT (PRODUCT,ZONE,PICKPERDAY) values ('Chicken','A','1');