Ern*_*roy 6 sql oracle iteration mathematical-optimization
我不确定我能找到什么是可能的,但它的思考肯定很有意思.我的目标是优化仓库的布局,但此问题适用于其他方案.
我有一个位置列表,到门的距离和它们所在的区域(例如区域A =冷藏,区域B =环境):
Location Zone Distance A1 A 1 A2 A 3 A3 A 5 A4 A 7 B1 B 2 B2 B 4 B3 B 6 B4 B 8
我还有一个产品清单,它们被挑选的次数和区域(区域A =需要冷藏的产品,区域B =需要冷藏的产品,区域A/B =没有限制的产品)
Product Zone Pick per day Milk A 8 Lettuce A/B 7 Bread B 6 Chocolate B 5 Tomatoes A/B 4 Dry Pasta B 3 Beef A 2 Chicken A 1
如果我只对优化选择产品的距离感兴趣,我会把最挑选的最接近门.我通过他们的ROW_NUMBER和ORDER BY Distance和Pick加入两个表来完成这个.
但是,我真的非常关心产品区域,因为我不能将面包存放在冷藏区域(它可能会变得潮湿).此外,我知道生菜可以存放在冷藏或非冷藏区域.
此外,应该有条件确保所有产品都分配一个空间(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
我看过SQL模式匹配但是没有成功.此外,我编写了一个迭代VBA函数,该函数在区域中使用"保留"空间,但这对于家用PC来说是慢的.
最后,谢谢!我一直在阅读stackoverflow中的所有问题,但这个我无法解决!
A。从这个sql开始:
select *
from product p left outer join location l on (INSTR(p.zone, l.zone)>0)
order by p.pickperday desc, l.distance asc;
b. 编写一个存储过程,您可以在其中
如何编写此类程序:http://docs.oracle.com/cd/B28359_01/java.111/b31225/cheight.htm#CHDCDHJD
供测试用:
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');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |