我认为这是一个调度问题,但我什至不确定!我想要的是找到非重叠购买决策的最佳顺序,当我完全了解它们的价值以及未来会出现什么机会时。
想象一个批发商销售我想为自己的商店购买的各种商品。在任何时候,他们可能会推出多项特别优惠;我会以全价出售,所以他们的折扣就是我的利润。
我想最大化利润,但问题是我一次只能买一件东西,没有信用这样的东西,更糟糕的是,交货延迟。好消息是商品一到货我就卖掉,然后我就可以再花钱了。因此,通过所有选择的一条路径可能是:我星期一买了 100 公斤的苹果,它们在星期二交货。然后我买了 20 件修女服装,在星期天送来,还算合适。我跳过了几天,因为我知道周三他们会以很大的折扣购买法拉利。所以我买了其中一个,它在下周二交付。等等。
您可以考虑复利或不复利。该算法归结为在选择今天的特别优惠之一或等待一天(因为明天会有更好的东西)之间的每个阶段的决定。
让我们抽象一下。购买和交付成为时代以来的日子。利润写为卖出价格除以买入价格。即 1.00 意味着盈亏平衡,1.10 意味着 10% 的利润,2.0 意味着我的钱翻了一番。
buy delivery profit
1 2 1.10 Apples
1 3 1.15 Viagra
2 3 1.15 Notebooks
3 7 1.30 Nun costumes
4 7 1.28 Priest costumes
6 7 1.09 Oranges
6 8 1.11 Pears
7 9 1.16 Yellow shoes
8 10 1.15 Red shoes
10 15 1.50 Red Ferrari
11 15 1.40 Yellow Ferrari
13 16 1.25 Organic grapes
14 19 1.30 Organic wine
注意:机会只存在于购买日(例如,如果没有人购买有机葡萄,它们就会被制成葡萄酒!),我可以在交货的同一天出售,但直到第二天才能购买我的下一件商品。所以我不能在 t=7 卖掉我的修女服装,然后立即在 t=7 买黄鞋。
我希望存在一个已知的最佳算法,并且已经有一个 R 模块,但算法或学术文献也会很好,就像任何其他语言的任何东西一样。速度很重要,但主要是当数据变大时,所以我想知道它是 O(n 2 ) 还是其他什么。
顺便说一句,如果有最大可能的交付延迟,最好的算法会改变吗?例如,如果delivery - buy <= 7
以下是上述 CSV 格式的数据:
buy,delivery,profit,item
1,2,1.10,Apples
1,3,1.15,Viagra
2,3,1.15,Notebooks
3,7,1.30,Nun costumes
4,7,1.28,Priest costumes
6,7,1.09,Oranges
6,8,1.11,Pears
7,9,1.16,Yellow shoes
8,10,1.15,Red shoes
10,15,1.50,Red Ferrari
11,15,1.40,Yellow Ferrari
13,16,1.25,Organic grapes
14,19,1.30,Organic wine
或作为 JSON:
{"headers":["buy","delivery","profit","item"],"data":[[1,2,1.1,"Apples"],[1,3,1.15,"Viagra"],[2,3,1.15,"Notebooks"],[3,7,1.3,"Nun costumes"],[4,7,1.28,"Priest costumes"],[6,7,1.09,"Oranges"],[6,8,1.11,"Pears"],[7,9,1.16,"Yellow shoes"],[8,10,1.15,"Red shoes"],[10,15,1.5,"Red Ferrari"],[11,15,1.4,"Yellow Ferrari"],[13,16,1.25,"Organic grapes"],[14,19,1.3,"Organic wine"]]}
或作为 R 数据框:
structure(list(buy = c(1L, 1L, 2L, 3L, 4L, 6L, 6L, 7L, 8L, 10L,
11L, 13L, 14L), delivery = c(2L, 3L, 3L, 7L, 7L, 7L, 8L, 9L,
10L, 15L, 15L, 16L, 19L), profit = c(1.1, 1.15, 1.15, 1.3, 1.28,
1.09, 1.11, 1.16, 1.15, 1.5, 1.4, 1.25, 1.3), item = c("Apples",
"Viagra", "Notebooks", "Nun costumes", "Priest costumes", "Oranges",
"Pears", "Yellow shoes", "Red shoes", "Red Ferrari", "Yellow Ferrari",
"Organic grapes", "Organic wine")), .Names = c("buy", "delivery",
"profit", "item"), row.names = c(NA, -13L), class = "data.frame")
链接
是否有任何 R 图形包(最短路径等)? (igraph提供了一个 shortest.paths 函数,除了 C 库之外,还有一个R 包和一个 python 接口)