Python-使用约束优化矩阵值,初学者
所以我有一个熊猫的数据框,里面有简单的键信息。我需要制定限制,至少30%的债券必须是长期债券,或者不超过60%的债券可以归类为高风险债券。简化表格如下:Python-使用约束优化矩阵值,初学者,python,numpy,scipy,Python,Numpy,Scipy,所以我有一个熊猫的数据框,里面有简单的键信息。我需要制定限制,至少30%的债券必须是长期债券,或者不超过60%的债券可以归类为高风险债券。简化表格如下: Bond | Returns | Length | Riskiness A | 0.045 | Short | Low B | 0.030 | Short | High C | 0.050 | Long | High D | 0.035 | Long | Low 那么,从本
Bond | Returns | Length | Riskiness
A | 0.045 | Short | Low
B | 0.030 | Short | High
C | 0.050 | Long | High
D | 0.035 | Long | Low
那么,从本质上讲,我应该如何编写代码来在保持约束的同时获得最大的投资组合价值呢?老实说,我甚至不知道从哪里开始
提前感谢您的帮助 您可以计算
“long”
和“high”
的数量,并使用以下公式除以值的总数:
>>总和(df[“Length”]=“Long”)/df[“Length”].count()>=.3
真的
>>>求和(df[“风险性”]=“高”)/df[“风险性”].count()您可以计算“多头”
和“高头”
的数量,并使用以下公式除以值的总数:
>>总和(df[“Length”]=“Long”)/df[“Length”].count()>=.3
真的
>>>sum(df[“Riskiness”]=“High”)/df[“Riskiness”]。count()是否要检查约束是否已投保,或者是否要从数据帧中删除行以适应约束?检查约束是否已投保!也许创建一个矩阵,然后使用这些约束求解。是否要检查约束是否已投保,或者是否要从数据帧中删除行以适应约束?检查约束是否已投保!也许创建一个矩阵,然后使用这些约束条件进行求解谢谢,这太棒了!但接下来,我会写什么语句来解决最终分配问题(假设df与表完全相同)?拨款总额为10万美元。很抱歉,如果这是非常基本的,但我对python还是相当陌生的,所以几乎所有的StackOverflow线程都太高级了,无法理解。@MB_14不用担心,很乐意提供帮助,但我不明白您所说的最终分配是什么意思(在融资方面,我完全不懂,所以如果它与融资有关,我可能会错过它)。因此,基本上,如果用户拥有10万美元,并且可以通过每份债券获得规定的回报(分别为4.5%、3%、5%和3.5%),那么在不受限制的情况下,分配资金的最佳方式是什么。理想情况下,你会把所有的钱都投入到收益率为5%的债券中,但必须遵守约束。@MB_14 ah现在明白了。这是一个很难解决的问题,最好用启发式的方法来解决。但是,您可以在分配资金的同时强制算法检查约束。或者,您可以使用一种启发式方法,尝试在遵守约束的同时优化增益。检查它是否相似,检查meta heurstic解决方案是否可以与自定义的健身功能一起应用。非常感谢您迄今为止提供的所有帮助。我将查看这些链接,看看如何实现它来求解矩阵。这是一个很好的开始,已经帮助我朝着正确的方向前进——再次感谢!谢谢,这太棒了!但接下来,我会写什么语句来解决最终分配问题(假设df与表完全相同)?拨款总额为10万美元。很抱歉,如果这是非常基本的,但我对python还是相当陌生的,所以几乎所有的StackOverflow线程都太高级了,无法理解。@MB_14不用担心,很乐意提供帮助,但我不明白您所说的最终分配是什么意思(在融资方面,我完全不懂,所以如果它与融资有关,我可能会错过它)。因此,基本上,如果用户拥有10万美元,并且可以通过每份债券获得规定的回报(分别为4.5%、3%、5%和3.5%),那么在不受限制的情况下,分配资金的最佳方式是什么。理想情况下,你会把所有的钱都投入到收益率为5%的债券中,但必须遵守约束。@MB_14 ah现在明白了。这是一个很难解决的问题,最好用启发式的方法来解决。但是,您可以在分配资金的同时强制算法检查约束。或者,您可以使用一种启发式方法,尝试在遵守约束的同时优化增益。检查它是否相似,检查meta heurstic解决方案是否可以与自定义的健身功能一起应用。非常感谢您迄今为止提供的所有帮助。我将查看这些链接,看看如何实现它来求解矩阵。这是一个很好的开始,已经帮助我朝着正确的方向前进——再次感谢!
>>> sum(df["Length"] == "Long") / df["Length"].count() >= .3
True
>>> sum(df["Riskiness"] == "High") / df["Riskiness"].count() <= .6
True