这就是差距啊。。。

这段时间应一位同学的请求,做了个吃豆子游戏。

关于吃豆子游戏应该说是很简单了吧?
尽管如此,我总是发现我做的游戏为什么就是不如先前那个叫clanLib中的吃豆子游戏例子来得流畅。(不爽啊)

除了绘画的API不相同以及图片不一样之外,算法基本上都是一样的啊。
就连人物的移动速度都调节成一样了,虽然对于任务来说是关系不大。但对于一个真正的游戏这是致命的啊。
幸好这有源代码,于是我把clanLib打开,经过比对分析,发现有个地方不一样影响到调用的时机。
我照着原理加入我自已的代码后就一样流畅了!

代码如下:
    for (;m_startTime < dwCurrent;m_startTime += 50) //这是原本的代码
     {
         for (iter = m_objects.begin(); iter != m_objects.end(); ++iter)
             (*iter)->Active(0.05f); //注1
     }

     if (m_startTime > dwCurrent )                   //这是在原本代码后面加入的代码
     {
         float fTime = (float)(dwCurrent + 50 - m_startTime);
         fTime /= 1000;
         m_startTime = dwCurrent;
         for (iter = m_objects.begin(); iter != m_objects.end(); ++iter)
             (*iter)->Active(fTime);
     }


我原来也是初看之下认为都是间隔50ms调用一次所有对象的激活。
最后想一下不对哦,比如现在的startTime 是 30ms,加上50ms. 等于80ms.而dwCurrent为40ms。
超出值,退出。下一次我的startTime还是80ms,这样中间就至少少调用了一次移动函数,浪费了一帧,
当每帧出现大量这种情况,我调用的次数基本上少了一倍。于是速度看起来就慢了一倍。
而我移动的间隔大,并且每次就是移动相同的距离,这就造成了卡的情况出现。

通过这次经验我又得出一个简单的道理,就是要在每帧都尽可能的显视出数据的变化。就好象上面的1ms的变化,每帧都要清楚显示。

唔,其实上面这段代码这样改了还是有问题(注1):当第一次startTime就小于Current,但不足50ms,而下面的代码的Active则笨蛋似的还搞
个50ms的信号送过去。

于是我又改,惊奇的放现改过后的代码与clanLib中的代码连形式都很相似了,不排除是看了他们代码受到影响了呵
float tmDiff = (float)(dwCurrent - m_startTime);
tmDiff  /= 1000; //ms转换为秒
float tmActive;
for (dffTime > 0.05; dffTime -= 0.05)
{
      tmActive = dffTime > 0.05f ? 0.05f : dffTime;
      for (iter = m_objects.begin(); iter != m_objects.end(); ++iter)
         (*iter)->Active(fTime); 
}

<think>嗯,用户问的是最优性差距的数学符号或表示方法。首先,我需要确定“最优性差距”这个术语在数学优化中的准确定义。最优性差距通常指的是某个解的目标函数值与最优解的目标函数值之间的差异,也就是当前解与理论最优解之间的差距。 然后,我需要回忆相关的数学符号。在优化问题中,目标函数一般表示为$f(x)$,最优解为$x^*$,对应的最优值为$f(x^*)$。因此,最优性差距可以表示为$f(x) - f(x^*)$,其中$x$是当前解。如果是最小化问题,差距就是$f(x) - f(x^*)$;如果是最大化问题,可能反过来,但通常统一用绝对值或差值表示。 不过,不同的文献可能有不同的表示方式,有些可能会用$\Delta$或者希腊字母来表示差距,比如$\delta$。另外,在算法分析中,有时会使用$\epsilon$来表示允许的误差范围,比如当$f(x) - f(x^*) \leq \epsilon$时认为解是近似最优的。 还需要考虑用户提供的引用内容。例如,引用[1]提到使用差商公式进行灵敏度分析,这可能与最优性差距的数值计算有关。引用[3]中的求和公式可能与约束条件有关,但不确定是否直接相关。需要确保使用的符号与这些引用中的用法一致,或者至少不冲突。 另外,用户可能需要具体的符号示例,所以最好给出几种常见的表示方法,并说明它们的适用场景。例如,在理论分析中可能使用$\Delta_{opt}$,而在具体算法中可能用$\epsilon$。同时,要区分最优性差距和可行性差距,后者涉及约束条件的满足程度。 最后,要确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,并检查语法是否正确。例如,最优解的目标值可以写成$f(x^*)$,差距则为$f(x) - f(x^*)$。如果有多个可能的符号,应该都提到,并解释其上下文。</think>### 最优性差距的数学符号与表示方法 最优性差距(Optimality Gap)通常用于衡量当前解与理论最优解之间的目标函数值差异。在数学优化中,其表示方法依赖于具体问题的类型和上下文环境: 1. **基础定义表示** 对于优化问题$\min f(x)$(或$\max f(x)$),若$x^*$是最优解,$x$为当前解,最优性差距可表示为: $$f(x) - f(x^*) \quad (\text{最小化问题})$$ 或 $$f(x^*) - f(x) \quad (\text{最大化问题})$$ 例如,若当前解目标值为$f(x)=100$,最优值为$f(x^*)=80$,则差距为$20$[^1]。 2. **相对最优性差距** 当问题规模较大时,常使用相对差距: $$\frac{|f(x) - f(x^*)|}{|f(x^*)|} \quad (\text{若}f(x^*) \neq 0)$$ 这种表示法在灵敏度分析和数值方法中更为常见[^1]。 3. **符号简化表示** 在算法分析中,可能直接使用$\Delta_{\text{opt}}$或$\epsilon$表示允许的差距阈值: $$f(x) \leq f(x^*) + \epsilon$$ 例如,当$\epsilon=0.1$时,表示接受与最优值相差不超过$0.1$的解。 4. **可行性差距的关联性** 若问题含约束条件(如$\sum P_i x_i = b$[^3]),需同时考虑**可行性差距**(约束违反程度)与最优性差距。此时差距分析需结合拉格朗日乘子或增广矩阵方法[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值