问题标签 [r-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
310 浏览

r - 带有 ROI 包的 R 中的加权顶点覆盖(作为线性规划)

我正在尝试使用 R 来解决加权顶点覆盖问题的一个实例,但我似乎无法正确解决。我正在使用ROI包(也可以使用linprog)。

该实例如下所示:

我的代码是:

结果是No solution found.我不知道我做错了什么,但它也可能是显而易见的。无法理解它——一个解决方案应该总是存在的,即使它需要所有的顶点(即所有变量都> = 0.5)。

如果重要的话,我在 Arch Linux 上从存储库(版本 2.14)运行 R 并通过install.packages("...").

谢谢!

0 投票
1 回答
2857 浏览

r - R:使用 ROI 包

我正在尝试将 R 包 ROI 用于简单的投资组合优化问题。
我可以使用 quadprog 求解器“手动”获得结果,但我真的很想了解 ROI 包的工作原理。
不幸的是,我遇到了一个错误,即使我坚持使用 Stefan Theussl 在http://statmath.wu.ac.at/courses/optimization/Presentations/ROI-2011.pdf提供的示例(幻灯片 26,27)

这是代码:

我得到的错误信息是:

(dir == "<=") | 中的错误 (dir = q = "<") : 操作只能用于数字、逻辑或复杂类型

谢谢你的帮助!

0 投票
1 回答
478 浏览

r - R ROI_解决错误

我无法在任何地方找到 R 包“ROI.plugin.cplex”。任何想法如何获得该包裹?我正在运行 Ubuntu 14.04 和 R 版本 3.2.2

我试过了

0 投票
0 回答
851 浏览

r - PortfolioAnalytics - ROI optimize.rebalancing 使用重新计价的月度价格会产生不正确的结果?

希望有人可以帮助或经历过类似的情况,为我指出问题所在的方向。

这是我的设置(请参阅下面的希望可重现的代码):

  • 建立一个符号列表
  • 通过雅虎的 FinancialInstrument 获取仪器数据
  • 从 Quandl 获取 EURUSD 汇率 - 需要身份验证令牌
  • 将价格重新命名为投资组合的基础货币
  • 从 2004 年 3 月 31 日到今天,为其货币资产和重新计价的价格(此处为欧元)建立每月回报
  • 通过重新平衡运行 ROI 优化

问题:

在按月重新平衡时,使用重新计价价格的回报似乎会在优化中产生不正确的结果(见图),因为回报不能保证这样的回报曲线,因为大部分投资组合都投资于“TLT” - 20 年期国债。

这给出了优化的结果,如下图所示:

在此处输入图像描述


index这是一个更大系统的一部分,但我希望我创建了一个可重现的代码,该代码显示了似乎仅在使用重新平衡时才适用的问题,这向我表明,或日期可能存在问题。但是,当将两者都返回 xts 到 Excel 时,我看不出有任何区别。

我在代码末尾添加了多个图表,因为目前我不允许发布超过两张图片。

任何帮助或提示非常感谢指出我正在发生的事情......

编辑 2016年 4 月 1 日刚刚再次研究了这个问题,因为重新命名的测试组合仍然存在问题。

我认为该问题可能是由某些时区影响引起的,并添加了一些检查(参见图表之前的代码)。return-xts-objects 和 weight-xts-objects 的索引保持相等(all.equal() 返回 TRUE)。

调试到 return.portfolio() 函数,

  • base.CCY.R 和asset.CCY.R 被标识为每月频率和开始日期2004-03-30。
  • 权重被标识为 xts(第 55 行),并提供以下第一个索引。

以下检查对于资产或基础货币的权重都是相等的:

根据 as.Date 的帮助页面,这假定“POSIXct”为“UTC”,因此我假设存在差异,但以下也返回 29:

这对我来说并不清楚,但它对于权重 xts 是一致的,而不是这个问题的一部分。

在第 72 行,return.portfolio 现在通过执行以下命令将返回 xts 减少到相同的起始索引:

在此之后,调用 Return.portfolio.geometric() 并在此处显示重新命名价格中优化的权重导致权重低于最大值 1.01。

也可以通过对提取的权重执行 rowSum() 来查看:

编辑 06/01/2016

在进一步查看由 Return.portfolio() 调用的 PerformanceAnaytics 包中的 Return.portfolio.geometric() 代码后:

  1. 迭代和返回计算

在第 49 行:

这将计算投资组合回报,在示例中它将是 0.877/1 - 1,这显然必须导致 -12.3% 的回报。

如果我没看错,这意味着期望权重等于 100%,因为 end_value 如果用户在 Return.portfolio() 调用期间的值设置中未提供,则设置为 1 或 100%。

下一次迭代的 end_value 为 0.877

  1. 迭代并返回计算

下一期的新投资组合起始值 0.877 乘以下一期的权重 90% 或 0.90 = 0.7893

与第一次迭代相同,由于 weight_sum 约束,PortfolioAnalytics 包计算的总权重为 90%,因此负回报将再次被夸大。

转换为 0.78/0.877 - 1 = -0.111

当时我的问题是:

  • 当权重为 <> 100% 或 1 时,如何计算正确的回报?
  • <> 100% 的 weight_sum 约束真的有意义吗?在现实生活中,缺失的百分比可能是现金/短期债券?
  • 基于此 - 选项可能是在使用 full_investment 约束时将现金回报添加到优化中,或者调整几何回报函数以警告权重 <> 100% 或包含权重 <> 100% 的逻辑不是一个选项?

最后但并非最不重要的一点是,或者我的日期索引仍然有问题?

不确定是否有人仍在阅读本文,但再次感谢任何支持或见解。非常感谢!

0 投票
2 回答
3749 浏览

r - R/PortfolioAnalytics optimize.portfolio()

我花了几个小时试图了解成功利用 PortfolioAnalytics 包中的optimize.portfolio()函数需要什么,但我收到了多个错误,尽管尝试了各种优化方法(例如,“DEoptim”、“ROI”)。

安装 PortfolioAnalytics 后,我尝试在指定投资组合约束后运行 optimize.portfolio(),但收到以下错误:

错误:paste0("package:", plugin) %in% search() || requireNamespace(plugin, .... is not TRUE

尝试下载“插件”,但我收到:

我首选的 optimize_method 是“ROI”,我已经安装了“ROI”包,但仍然收到需要“插件”的错误。

我尝试通过手动安装“DEoptim”来解决这个问题,但我仍然无法成功运行 optimize.portfolio():

尽管下载了多个包(当我第一次安装“PortfolioAnalytics”时,为什么 R 不会自动安装所需的包?),当我运行“DEoptim”时收到以下错误:

seq.default 中的错误(from = round(min,rounding),to = round(max,rounding),:'from' 不能是 NA、NaN 或无限

作为参考,这里是我加载的所有包:

0 投票
1 回答
375 浏览

r - 使用多参数 F_objective 函数在 R 中优化 ROI

试图在 R 中运行一个简单的 ROI 优化,但经过几个小时的烦躁,我不知所措。我不断收到错误:

这是示例代码:

关于传递多少参数的任何想法n

0 投票
1 回答
141 浏览

r - R:定义优化问题构造函数 OP(包 ROI)的界限。UseMethod 中的错误(“as.V_bound”)

我想在使用 ROI 包进行优化时定义变量的界限。我使用 OP 函数来构造优化问题对象。

默认值为:下限等于 0,上限等于 +infinity。

这是一个运行良好的示例代码:

但是,如果我“手动”添加边界,则会出现错误:

但是描述说“边界”需要一个列表作为输入。

有没有人知道如何正确地将边界传递给 OP 函数?

0 投票
1 回答
261 浏览

r - 使用 R 软件并行运行多个线性优化

我设置了一个小的线性规划来优化作物产量,给定氮的产量响应曲线(具有对应于最大可达到产量的平台的线性响应)。我使用 R 软件中的 OPEN-OR CLP 求解器通过使用ROI包编写了这个 LP 程序。

这里是我的简化问题的结构,只给出了两种作物:

作物产量:Y1 和 Y2 作物面积:A1 和 12 作物单位面积氮吸收:N1 和 N2 总氮:N_总产量响应曲线:Y1 = k1 * N1, Y2 = k2 * N2

矩阵形式:

现在,我需要多次运行这个优化(给定 61 种作物),每次 k、Y_max 和 N_total 的值都会发生变化。我为这些参数中的每一个构建了一个向量,每个向量包含大约 90 亿个值(原始数据存储在整个地球的栅格地图中,分辨率为 5 弧分,我将其转换为向量)。由于计算时间很长,我想并行化我的代码,并且我想使用使用包和并行运算符的foreach循环。然而,并行化不起作用。foreach%dopar%

这是我的代码详细信息。我首先从我的数组开始构建约束矩阵(每个数组的维度 dim=c(1,9231201,61) 包含每个变量的值,然后我计算优化:

有谁知道为什么 for each 循环不起作用(即它不会产生任何结果而不是错误,并且当我停止 R 运行计数器j时没有改变它的值)?关于如何以不同的方式并行运行此优化的任何建议?

0 投票
1 回答
332 浏览

r - 调用 ROI“LP”和“QP”函数

我正在尝试重现 ROI 创建者给出的一些示例。

例如,在http://statmath.wu.ac.at/courses/optimization/Presentations/ROI-2011.pdf(幻灯片 15-17)中有一个例子:

当我运行它时,我得到了错误

事实上,这些函数不在 ROI 的命名空间中。例如

我在网上找到的其他示例中出现了相同的语法,但从未定义函数 LP 和 QP。

我正在使用 ROI 0.3.0

有人可以告诉我出了什么问题吗?

0 投票
1 回答
101 浏览

r - ROI lpsolve 插件使用二进制约束得到错误的结果

我正在尝试通过ROI接口 ( ROI.plugin.lpsolve) 使用 lp_solve 求解器并获得 MIP 问题的随机结果。

这是我期望 0/1 二进制解决方案的示例:

正确的解决方案是:

插件似乎没有正确设置类型向量。