Skip to content

Defect in maximum calculation #3

Open

Description

@michaldo

A standard pattern is used for maximum calculation:

double maxValue = Double.MIN_VALUE;
for (int nextAction : actionsFromState) {
  double value = Q[nextState][nextAction];
 
  if (value > maxValue) 
    maxValue = value;
}

But Double.MIN_VALUE in Java is not minimal double but minimal positive value. See https://stackoverflow.com/questions/3884793/why-is-double-min-value-in-not-negative for details.

Especially, if each value considered in for-loop is 0, calculated maximum is Double.MIN_VALUE, because Double.MIN_VALUE > 0.

However, replacing Double.MIN_VALUE with Double.NEGATIVE_INFINITY cause wrong calculation. In such case maxQ(8) is Double.NEGATIVE_INFINITY and whole calculation fails.

Summary: maximum calculation is implemented wrong or at least misleading. It hard to me to propose a solution because it is not clear to me what is expected to be maxQ(8)

Activity

  1. ahsan-ikram commented on Jun 18, 2018

    @ahsan-ikram

    I checked the code and I found the same issue as described above. Please use double maxValue = Double.NEGATIVE_INFINITY otherwise condition is never satisfied when it should be
    if (value > maxValue)
    maxValue = value;

  2. technobium commented on Jun 28, 2018

    @technobium
    Owner

    Thanks for the observation. I changed the code.

  3. SimonAsenime commented on Aug 2, 2018

    @SimonAsenime

    While testing your code, I found that having double maxValue = Double.NEGATIVE_INFINITY throws off the whole calculation. Using Double.MIN_VALUE should fix things. Well, it runs perfect using MIN_VALUE anyway.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions