随着时间的推移,通过买卖土豆香料获得最大财富

如何解决随着时间的推移,通过买卖土豆香料获得最大财富

假设我们有 10 美元的初始财富,我们想通过买卖土豆来赚钱,并且以一种神奇的方式我们知道每种土豆香料每年每公斤的价格(美元)。找到最终最大财富或局部最大值的最佳算法是什么?

!!如果你有 15 美元的财富,你一年卖了几公斤,赚了 4 美元,你不能买同一年花费 19 美元的东西,他们是独立的,所以你应该在卖之前有钱买东西同一年的其他东西!!

例如

发财:10$

每年每公斤马铃薯香料的价格(美元):

  • 马铃薯香料 1 价格 ($) 每公斤:
    [5,8,7,10,12,11,14,10]

  • 马铃薯香料 2 价格 ($) 每公斤:
    [8,4,5,15,10]

  • 马铃薯香料 3 价格 ($) 每公斤:
    [4,6,9,11]

什么是好的解决方案?

一个简单的局部最大值可以通过以下路径:

  • 第一年:
    [从第一种香料中购买 1 公斤(5 美元)]
    [从第三种香料中购买 1.25 公斤(5 美元)]
  • 第 2 年:
    [从第一种香料开始销售 1 公斤(8 美元)]
  • 第 3 年:
    [从第二种香料中购买 2 公斤(8 美元)]
  • 第 4 年:没有
  • 第 5 年:没有
  • 第 6 年:没有
  • 第七年:没有
  • 第 8 年:
    [从第三种香料出售 1.25 公斤(-15x1.25=18.75 美元)]
    [从第二种香料出售 2 公斤(12x2=24 美元)]
  • 第 9 年
    什么都没有

财富 42.75$(这是一个例子,肯定不是最大的财富)

解决方法

根据您的示例,我假设金钱和土豆是连续数量。这意味着我们在任何给定年份的最大财富价值可以线性划分为每种土豆的价值加上现金价值。

P(i,k)i 年每公斤马铃薯 k 的价格。定义 V(i,k)i 年 1 kg 马铃薯 k 的价值,让 F(k)k 年 $1 的价值。从 d 美元开始的最大财富是 d * F(0)

作为基本情况,在去年 k_max 我们有:

V(i,k_max) = P(i,k_max)
F(i,k_max) = 1

我们可以通过如下相互递归计算 VF 的剩余值:

  • 在给定的年份 k,对于每种类型的马铃薯 i,我们可以将马铃薯保留到下一年,或者以现金形式出售:

    V(i,k) = max(V(i,k+1),P(i,k) * F(k+1))

  • 在给定的 k 年,我们可以购买一些土豆 i(价值为 i 的任何值)或持有现金直到明年:>

    F(k) = max(V(i,k+1)/P(i,k),F(k+1))

请注意,由于线性可分性,“混合”策略没有任何好处。在某一年,我们要么将所有现金投资于利润最高的马铃薯品种,要么根本不投资。同样,对于每种马铃薯类型和年份,我们应该要么出售该类型的所有资产,要么将它们保留到下一年。


让我们看看您的示例的结果。下表显示了使用此方法计算的最佳策略。对于每一年,B 表示我们应该将钱投资于该种土豆,而 S 表示我们应该出售该种土豆。 - 表示我们不应在该年购买或出售该种土豆。

    Year 1 2 3 4 5 6 7 8 9
Potato 1 - S - S S S S S S
       2 S S B B B S - S S
       3 B S S S S B B S S

从 10 美元起,这给了我们:

  • 第 1 年:花 10 美元购买 2.5 公斤土豆 3
  • 第 2 年:以 17.50 美元的价格出售 2.5 公斤马铃薯 3
  • 第 3 年:以 17.50 美元购买 4.375 公斤马铃薯 2
  • 第 4 年:什么都不做
  • 第 5 年:什么都不做
  • 第 6 年:以 65.625 美元的价格出售 4.375 公斤马铃薯 2
  • 第 7 年:以 65.625 美元的价格购买约 5.97 公斤的土豆 3
  • 第 8 年:以约 89.49 美元的价格出售约 5.97 公斤的马铃薯 3
  • 第 9 年:什么都不做

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?