我有一个符合以下规则的游戏:
用户获得水果价格并且每次都有机会在他们的水果篮中购买或出售物品.
一次转动,用户的篮子总变化不会超过10%.
我的目标是尽可能以低廉的价格准确地猜测(如果没有蛮力),并且如果有数以千计的新果实,则进行扩展.
我很难找到答案,但在我看来,并不难.如果我有下表.我可以在第1天学习并获得以下数据:
Apple 1
Pears 2
Oranges 3
Basket Value = 217
Run Code Online (Sandbox Code Playgroud)
我可以做一个餐巾计算的背面并假设,篮子里的重量是:0苹果,83个梨和17个橙子等于篮子值217.
第二天,水果和篮子的价值发生了变化.To(apple = 2,Pear 3,Oranges 5),篮子值为348.当我假设体重超过(0,83,17)时,我得到的总值为334 - 不正确!通过我的脚本运行这个,我看到最接近的匹配是0苹果,76个梨,24个橙子,虽然它们等于348,当它的因素变化百分比是38%变化所以它是不可能的!
我知道我可以完全暴力,但如果我有1000个水果,它将无法扩展.不要跳过任何潮流,但像神经网络这样的东西可以迅速排除不太可能,所以我计算大量的数据?我认为他们必须比纯暴力更具可扩展性/更快速的方式?或者是否有任何其他类型的解决方案可以获得结果?
这是原始数据(记住程序只能看到价格和总篮数值):
这里有一些暴力代码(谢谢@paul Hankin比我的更清洁的例子):
def possibilities(value, prices):
for i in range(0, value+1, prices[0]):
for j in range(0, value+1-i, prices[1]):
k = value - i - j
if k % prices[2] == 0:
yield i//prices[0], j//prices[1], k//prices[2]
def merge_totals(last, this, r):
ok = []
for t in this:
for l in last:
f …Run Code Online (Sandbox Code Playgroud) 我迷上了使用Python和NetworkX来分析图形,因为我学到更多,我想使用越来越多的数据(猜测我正在变成一个数据迷:-).最终我认为我的NetworkX图形(存储为dict的dict)将超出我系统的内存.我知道我可能只是添加更多内存,但我想知道是否有办法将NetworkX与Hbase或类似解决方案集成?
我环顾四周,找不到任何东西,但我也找不到与允许简单的MySQL后端相关的任何东西.
这可能吗?是否存在允许连接到某种持久存储的任何东西?
谢谢!
更新:我记得在"社交网络分析初创公司"中看过这个主题,作者谈到了其他存储方法(包括hbase,s3等),但没有说明如何做到这一点或是否可行.
我知道如果我做redis-cli -h {ip_address} -p {port}我可以连接到特定的端口/ ip但是我设置我的实例不听任何tcp/ip端口而不是它监听本地套接字.
如何与redis客户端建立套接字连接?
有没有办法得到一个数字的最后一位数.我试图找到以"1"结尾的变量,如1,11,21,31,41等.
如果我使用文本变量,我可以简单地说
print number[:-1]
Run Code Online (Sandbox Code Playgroud)
但它适用于带有文本的变量(如"hello")但不适用于数字.对于数字,我收到此错误:
TypeError: 'int' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
我试图看看是否有更好的方法以这种方式处理数字.我知道一个解决方案是转换为一个字符串,然后执行上面的命令,但我试图看看是否有另一种我错过的方式.
非常感谢提前...
我正在制作一款游戏有问题.我想我知道解决方案(或者应用什么解决方案),但不确定所有"碎片"是如何组合在一起的.
游戏如何运作:
将为用户提供具有值的项目(值每天更改,并且程序知道价格的变化).例如
Apple = 1
Pears = 2
Oranges = 3
Run Code Online (Sandbox Code Playgroud)
然后他们将有机会选择他们喜欢的任何组合(即100个苹果,20个梨和1个橙子).计算机获得的唯一输出是总值(在此示例中,其当前为143美元).电脑会试着猜猜他们有什么.显然,第一回合无法正确使用.
Value quantity(day1) value(day1)
Apple 1 100 100
Pears 2 20 40
Orange 3 1 3
Total 121 143
Run Code Online (Sandbox Code Playgroud)
下一轮用户可以修改他们的数量但不超过总数量的5%(或者我们可能选择的其他百分比.例如,我将使用5%).水果价格可以随意变化,因此总价值也可能因此而变化(为简单起见,本例中我没有改变水果价格).使用上面的例子,在游戏的第2天,用户在第3天返回$ 152和$ 164的值.这是一个例子.
quantity(day2) %change(day2) value(day2) quantity(day3) %change(day3) value(day3)
104 104 106 106
21 42 23 46
2 6 4 12
127 4.96% 152 133 4.72% 164
Run Code Online (Sandbox Code Playgroud)
*(我希望表格显示正确,我不得不手动分隔它们,所以希望它不仅仅是在我的屏幕上做,如果它不起作用让我知道,我会尝试上传截图).
我试图看看我是否可以计算出一段时间内的数量(假设用户有耐心继续输入数字).我现在知道我唯一的限制是总价值不能超过5%所以我现在不能达到5%的准确度,所以用户将永远进入它.
到目前为止我做了什么:
我已经采用了水果篮的所有价值和水果篮的总价值,并创造了一个包含所有可能性的大表.一旦我列出了所有可能性,我就使用了图论并为每个可能的解决方案创建了节点.然后,如果它在5%的变化范围内,我会在每天的节点之间创建边(链接)(例如day1到day2).然后我删除所有没有边缘的节点(链接到其他节点),并且当用户继续播放时,我也会在路径变为死路时删除整个路径.这很好,因为它缩小了选择范围,但现在我被卡住了,因为我想缩小这些选择范围.我被告知这是一个隐藏的马尔可夫问题,但是一个棘手的版本,因为状态正在改变(正如你可以看到上面的每个回合都添加了新节点,旧的/不可能的节点被删除).
**如果它有帮助,我在baum-welch模型(用于训练数据)的python实现上得到了一个惊人的答案(带有示例代码):Baum-Welch的实现示例**
我认为需要做什么(这可能是错的):
现在我缩小了结果范围,我基本上试图让程序尝试根据缩小的结果基础来预测正确的结果.我认为这是不可能的,但有几个人建议这可以通过隐藏的马尔可夫模型来解决.我想我可以对数据进行多次迭代(使用Baum-Welch模型),直到概率稳定(并且应该从用户获得更多转弯时变得更好).隐藏马尔可夫模型的方式能够检查拼写或手写并在出错时进行改进(在这种情况下的错误是选择在下一回合被删除的篮子是不可能的).
两个问题:
如果所有状态首先相等,我如何计算过渡和发射矩阵?例如,由于所有州都同样可能必须使用某些东西来专门改变状态的概率.我正在考虑使用我所做的图来对具有最大边数的节点进行加权,作为过渡/发射状态计算的一部分?这有意义还是有更好的方法?
如何跟踪各州的所有变化?随着新的篮子被添加并且旧的篮子被移除,存在跟踪篮子的问题.我虽然一个Hierarchical Dirichlet过程隐藏马尔可夫模型(hdp-hmm)将是我需要的但不完全确定如何应用它.
(对不起,如果我听起来有点沮丧..有点难以知道问题是可解决的但是无法在概念上掌握需要做的事情).
一如既往,感谢您的时间,任何意见/建议将不胜感激.
我在为我的应用程序决定使用python多处理或celery或pp时遇到了一些麻烦.
我的应用程序非常重CPU,但目前只使用一个cpu,所以我需要将它扩展到所有可用的cpus(这使我看到python的多处理库)但我读到如果需要,这个库不会扩展到其他机器.现在我不确定我是否需要多个服务器才能运行我的代码,但我想在本地运行celery然后扩展只需要添加新的服务器而不是重构代码(就像我使用的那样)多).
我的问题:这个逻辑是否正确?在本地使用芹菜是否存在任何负面影响(如果事实证明,具有多个核心的单个服务器可以完成我的任务)?或者是否更多建议使用多处理并在以后将其扩展到其他内容?
谢谢!
ps这是一个个人学习项目,但我可能有一天会喜欢在一家公司担任开发人员,并希望了解专业人士如何做到这一点.
我有一个问题,我需要很快将数据(超过50亿行)加载到数据库中(理想情况下不到30分钟但更快更好),我最近建议调查postgresql(我用mysql失败了)并且正在看hbase/cassandra).我的设置是我有一个集群(目前有8个服务器)可以生成大量数据,我想在集群中的每台机器上本地运行数据库,它在本地快速写入,然后在最后(或整个数据生成)数据是合并在一起.数据不是任何顺序所以我不关心它在哪个特定服务器上(只要它最终存在).
我的问题是,是否有任何好的教程或地方可以了解PostgreSQL自动分片(我发现像sykpe这样的公司的结果做自动分片但没有教程,我想自己玩这个)?我正在尝试做什么?因为数据不是以任何顺序我将使用自动递增ID号,如果合并数据会导致冲突(这不再是一个大问题)?
更新:弗兰克的想法在某种程度上消除了我所询问的自动递增冲突问题.问题基本上是现在,我如何了解自动分片并支持分布式上传数据到多个服务器?
我正在使用networkx(python中的图形库),我发现文档说PageRank算法在评分时会考虑边缘权重,但我想知道更大边缘权重是更好还是更低权重更好?
我正在尝试将 DF 中的一些浮点列转换为 int,但出现上述错误。我尝试过将其转换以及 fillna 为 0(我不喜欢这样做,因为在我的数据集中需要 NA)。
我究竟做错了什么?我都尝试过:
orginalData[NumericColumns] = orginalData[NumericColumns].astype('Int64')
#orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype('Int64')
Run Code Online (Sandbox Code Playgroud)
但它一直导致同样的错误
TypeError: cannot safely cast non-equivalent float64 to int64
Run Code Online (Sandbox Code Playgroud)
我可以做什么来转换列?
我在尝试捕获错误时遇到问题.我正在使用Pyramid/SQLAlchemy并使用电子邮件作为主键创建了一个注册表单.问题是当输入重复的电子邮件时它会引发IntegrityError,所以我试图捕获该错误并提供一条消息,但无论我做什么我都抓不到它,错误不断出现.
try:
new_user = Users(email, firstname, lastname, password)
DBSession.add(new_user)
return HTTPFound(location = request.route_url('new'))
except IntegrityError:
message1 = "Yikes! Your email already exists in our system. Did you forget your password?"
Run Code Online (Sandbox Code Playgroud)
当我尝试时,我得到了同样的信息except exc.SQLAlchemyError(虽然我想捕捉到特定的错误而不是全部捕获).我也试过exc.IntegrityError但没有运气(虽然它存在于API中).
我的Python语法有什么问题,或者我需要在SQLAlchemy中做些什么才能捕获它?
我不知道如何解决这个问题,但我对可能导致问题的原因有一些想法.也许try语句没有失败但是成功,因为SQLAlchemy本身就引发了异常而Pyramid正在生成视图,因此except IntegrityError:永远不会被激活.或者,更有可能的是,我完全错误地抓住了这个错误.
python ×8
graph-theory ×2
networkx ×2
algorithm ×1
celery ×1
database ×1
nosql ×1
pagerank ×1
pandas ×1
partitioning ×1
postgresql ×1
pyramid ×1
redis ×1
sharding ×1
sqlalchemy ×1
tensorflow ×1