我在上个月用c#创建了一个简单的国际象棋引擎,并取得了一些不错的进展.它使用简单的Alpha-Beta算法.
为了纠正Horizon-Effect,我试图实现静态搜索(并在它工作之前多次失败).发动机的强度似乎有点改善了安静,但速度非常慢!
在此之前,我可以在大约160秒(在游戏中期的某个地方)搜索6层深度,通过静态搜索,计算机需要大约80秒才能在搜索深度3上移动!
蛮力节点计数器在深度3处大约20000个节点,而静态节点计数器高达2000万!
由于这是我的第一个国际象棋引擎,我真的不知道这些数字是否正常,或者我是否在我的静止算法中犯了错误.如果有经验的人能告诉我BF节点/静态节点的通常比例是多少,我将不胜感激.
顺便说一句,看看:(每当searchdepth为0时,此方法由BF树调用)
public static int QuiescentValue(chessBoard Board, int Alpha, int Beta)
{
QuiescentNodes++;
int MinMax = Board.WhoseMove; // 1 = maximierend, -1 = minimierend
int Counter = 0;
int maxCount;
int tempValue = 0;
int currentAlpha = Alpha;
int currentBeta = Beta;
int QuietWorth = chEvaluation.Evaluate(Board);
if(MinMax == 1) //Max
{
if (QuietWorth >= currentBeta)
return currentBeta;
if (QuietWorth > currentAlpha)
currentAlpha = QuietWorth;
}
else //Min
{
if (QuietWorth <= currentAlpha)
return currentAlpha;
if (QuietWorth …Run Code Online (Sandbox Code Playgroud) 编辑:我刚刚通过pip重新安装PyOpenGL来解决这个问题.现在,同一程序按预期工作.谢谢你的努力.
整个问题被重写和澄清.
问题不在于(虽然很奇怪)纹理创建和绑定方法,如评论中所述.
我的实际问题是着色器中的统一变量在调用glDrawArrays()之间更改(是的,从着色器外部更改)时不会更新它们的值.我通过使用不同类型的制服,不同的值并通过渲染到纹理来检查它们的值来验证.
一旦调用glDrawArrays(),看起来制服的值就会被锁定.之后,我只能在清除颜色缓冲区时再次更改它们.
我愿意为任何有效的解决方案提供奖励.在我看来,发布任何源代码都没有帮助,因为问题似乎并不在于代码.
任何建议都是适用的.
我目前正在一个小项目中使用 RPi 3B(最新的 Raspbian Jessie),该项目涉及播放一个简短的 .mp4 文件。由于 Pygame 似乎支持播放 .mpg 文件,因此我将视频转换为该格式。
但是,当我尝试导入电影模块时,出现常见的 Python 导入错误:
Traceback (most recent call last):
File "film_app.py", line 3, in <module>
import pygame.movie
ImportError: No module named movie
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我认为其他人也遇到了与此处所述相同的问题。我真的不明白是否有解决方案,或者我在 RPi 上有什么替代方案。
Pygame、python 和 Raspbian 是最新的。
我是OpenGL的新手,想学习将其用于一些我想用3d图形重写的2d游戏。因此,我开始阅读有关如何与Pythhon一起使用的教程,并安装了PyOpenGL。
我的问题是,我的程序显示一个具有120 fps限制的简单多维数据集仅以25 fps的速度运行。我发现所有性能损失都在OpenGL部分,但是我无法弄清楚确切的位置。
我的问题是:-OpenGL在Python上运行这么慢是否正常?-我的旧笔记本是问题的一部分吗?
这是我用于显示多维数据集的代码:
def draw(self):
glBegin(GL_QUADS)#info for OGL: treat following code as surface drawing code
for surface in self.surfaces:
x = 0
for vertex in surface:
x+=1
glColor3fv(self.colors[x])
glVertex3fv(self.verticles[vertex])
glEnd()
glBegin(GL_LINES) #info for OGL: treat following code as line drawing code
for edge in self.edges:
for vertex in edge:
glVertex3fv(self.verticles[vertex]) #pass each verticle in the verticles list to glVertex3fv, which creates edges
glEnd() #info for OGL:no more code incoming
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏。