Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Perl Program - Out of memory?

by jdlev (Scribe)
on Nov 15, 2013 at 20:07 UTC ( #1062782=note: print w/ replies, xml ) Need Help??


in reply to Re: Perl Program - Out of memory?
in thread Perl Program - Out of memory?

Sorry...here's the code...should of thought of that in advance I guess..

#USAGE EXAMPLE - Max Points Replaced If Higher Value Found require 'funcs_top10.pl'; $delay = 3; $maxSalary = 100000; $programStartTime = localtime(); $qbHash = getStats("QB"); #Sorts Player Statistics Into Hashes + According To Position $rbHash = getStats("RB"); $wrHash = getStats("WR"); $teHash = getStats("TE"); $dstHash = getStats("DST"); $flHash = getFlexStats(); foreach $key(sort keys $qbHash) { $QB1i = $qbHash->{$key}->{PlayerID}; $QB1s = $qbHash->{$key}->{Salary}; $QB1p = $qbHash->{$key}->{FPPG}; $QB1pos = $qbHash->{$key}->{Position}; #print "QB1 count = $qb1count \n"; #$qb1count++; foreach $key(sort keys $qbHash) { $QB2i = $qbHash->{$key}->{PlayerID}; $QB2s = $qbHash->{$key}->{Salary}; $QB2p = $qbHash->{$key}->{FPPG}; $QB2pos = $qbHash->{$key}->{Position}; #print "--QB2 count = $qb1count \n"; #$qb2count++; if ($QB1i != $QB2i) { foreach $key(sort keys $rbHash) { $RB1i = $rbHash->{$key}->{PlayerID}; $RB1s = $rbHash->{$key}->{Salary}; $RB1p = $rbHash->{$key}->{FPPG}; $RB1pos = $rbHash->{$key}->{Position}; #print "----RB1 count = $rb1count \n"; #$rb1count++; foreach $key(sort keys $rbHash) { $RB2i = $rbHash->{$key}->{PlayerID +}; $RB2s = $rbHash->{$key}->{Salary}; $RB2p = $rbHash->{$key}->{FPPG}; $RB2pos = $rbHash->{$key}->{Positi +on}; #print "------RB2 count = $rb2coun +t \n"; #$rb2count++; if ($RB1i != $RB2i) { foreach $key(sort keys $wrHash) + { $WR1i = $wrHash->{$key}->{ +PlayerID}; $WR1s = $wrHash->{$key}->{ +Salary}; $WR1p = $wrHash->{$key}->{ +FPPG}; $WR1pos = $wrHash->{$key}- +>{Position}; #print "--------WR1 count += $wr1count \n"; # $wr1count++; foreach $key(sort keys $wr +Hash) { $WR2i = $wrHash->{ +$key}->{PlayerID}; $WR2s = $wrHash->{ +$key}->{Salary}; $WR2p = $wrHash->{ +$key}->{FPPG}; $WR2pos = $wrHash- +>{$key}->{Position}; if($WR1i != $W +R2i) { foreach $k +ey(sort keys $teHash) #TE1 Start { $T +E1i = $teHash->{$key}->{PlayerID}; $T +E1s = $teHash->{$key}->{Salary}; $T +E1p = $teHash->{$key}->{FPPG}; $T +E1pos = $teHash->{$key}->{Position}; fo +reach $key(sort keys $dstHash) #DST Start + { + $DSTi = $dstHash->{$key}->{PlayerID}; + $DSTs = $dstHash->{$key}->{Salary}; + $DSTp = $dstHash->{$key}->{FPPG}; + $DSTpos = $dstHash->{$key}->{Position}; + + foreach $key(sort keys $flHash) #FL1 Start + { + $FL1i = $flHash->{$key}->{PlayerID}; + $FL1s = $flHash->{$key}->{Salary}; + $FL1p = $flHash->{$key}->{FPPG}; + $FL1pos = $flHash->{$key}->{Position}; + if (($FL1i != $RB1i) && ($FL1i != $RB2i) && ($FL1i +!= $WR1i) && ($FL1i != $WR2i) && ($FL1i != $TE1i)) #FL1 != If Start + { + foreach $key(sort keys $flHash) #FL2 Start + { + $FL2i = $flHash->{$key}->{PlayerID} +; + $FL2s = $flHash->{$key}->{Salary}; + $FL2p = $flHash->{$key}->{FPPG}; + $FL2pos = $flHash->{$key}->{Positio +n}; + if (($FL2i != $RB1i) && ($FL2i != $ +RB2i) && ($FL2i != $WR1i) && ($FL2i != $WR2i) && ($FL2i != $TE1i) && +($FL1i != $FL2i)) #FL1 != If Start + { + ########################################### +#################### + $newMaxSalary = $QB1s + $QB2s + $RB1s + + $RB2s + $WR1s + $WR2s + $TE1s + FL1s; + $newMaxPoint = $QB1p + $QB2p + $RB1p + +$RB2p + $WR1p + $WR2p + $TE1p + $FL1p; + if($newMaxSalary < $maxSala +ry) + { + #print "Current Salary += " . $newMaxSalary . "\n"; + if (!$maxPoint) + { + $maxPoi +nt = $newMaxPoint; + } + else + { + if($max +Point < $newMaxPoint) + { + + $maxPoint = $newMaxPoint; + + print "New Max Points Reached! " . $maxPoint . "\n"; + + print "Here is your team! \n"; + + print "QB1 = " . $QB1i . "\n"; + + print "QB2 = " . $QB2i . "\n"; + + print "RB1 = " . $RB1i . "\n"; + + print "RB2 = " . $RB2i . "\n"; + + print "WR1 = " . $WR1i . "\n"; + + print "WR2 = " . $WR2i . "\n"; + + print "TE1 = " . $TE1i . "\n"; + + print "FL1 = " . $FL1i . "\n"; + + print "FL2 = " . $FL2i . "\n"; + + print "DST = " . $DSTi . "\n"; + + print "******************************************* \n \n"; + + sleep($delay); + }#i +f + }#else + }#if + }#if + ########################################### +######################### + }#FL2 != If End + }#FL2 End + }#FL1 != If End + }#FL1 End + }#DST End }#TE1 +End }#WR2 End }#WR1 End }#RB2 If End }#RB2 End }#RB1 End } }#QB2 End }#QB1 End print "--------------- Projected Team Points = $maxPoints ------------ +--\n"; print "$$$$$$$$$$$$$$$ Projected Team Salary = $salary $$$$$$$$$$$$$$$ +\n\n"; $programStopTime = localtime(); print "Program Start Time - $programStartTime, Program Stop Time - $pr +ogramStopTime \n";
I love it when a program comes together - jdhannibal


Comment on Re^2: Perl Program - Out of memory?
Download Code
Replies are listed 'Best First'.
Re^3: Perl Program - Out of memory?
by educated_foo (Vicar) on Nov 15, 2013 at 23:10 UTC
    You have "foreach" loops 10 deep in that program. If each one runs only 3 times, that's 60,000 iterations of the inner loop. I would seriously consider rethinking what you're trying to do, or how you're doing it, because an O(n^10) algorithm is usually a recipe for disaster.
Re^3: Perl Program - Out of memory?
by Anonymous Monk on Nov 15, 2013 at 21:41 UTC
    My OCD kicked in and while I could not find any particular memory-related errors, I 'fixed' the program's indentation so that it should be more legible (so the other monks have an easier time looking at it).

    A couple of more obvious errors were fixed, too. Please check that the code still behaves the same.

    You really ought to use warnings at the very least; it might provide pertinent clues to the issue.

      Excellent catches. Yes, I program on a widescreen so sorry about the funky, hard to read output. Is there a way to change that in my account settings? Also, using warnings helped a bit. It showed a bunch of problems that were solved by simply putting "my" infront of a few variables. I'm running the program right now to see if it runs into the same error. I'll let you know if it continues, but when I run the program it can take a while before it runs out of memory.

      My perl version is 5, version 16, subversion 3 (v5.16.3)

      I love it when a program comes together - jdhannibal
Re^3: Perl Program - Out of memory?
by Anonymous Monk on Nov 15, 2013 at 21:05 UTC
    Are you perchance coding on a widescreen monitor? It might affect your code layout.
    $newMaxSalary = $QB1s + $QB2s + $RB1s + $RB2s + $WR1s + $WR2s + $TE1s ++ FL1s;
    This shouldn't affect anything memory-related, but FL1s is missing a dollar sign there.
Re^3: Perl Program - Out of memory?
by Anonymous Monk on Nov 16, 2013 at 15:27 UTC
    Downvoted!

    Your code is unreadable and you've been begged to reduce indentation, but you didn't react.

Re^3: Perl Program - Out of memory?
by taint (Chaplain) on Nov 15, 2013 at 20:29 UTC
    Wild guess here; but could your sleep($delay); function cause any buffering?

    Like I said, a wild guess. Glancing at it here. That was all that jumped out at me

    HTH

    --Chris

    #!/usr/bin/perl -Tw
    use Perl::Always or die;
    my $perl_version = (5.12.5);
    print $perl_version;
      Tried setting the delay to 0 and no dice. It just get's to the "Out of Memory!" error much faster (which will help in tracking down the issue). Is there a way to track down memory leaks in perl?
      I love it when a program comes together - jdhannibal
        Is there a way to track down memory leaks in perl?

        Your code isn't leaking memory. It is just using more than it has available.

        At least, that is what I strongly suspect, but given that you've stopped answering questions, there's no way to derive a definitive conclusion.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
        Hmm... "Out of memory faster". Why not try the other direction; bump up the sleep time, a bit, and see what that does.

        --Chris

        #!/usr/bin/perl -Tw
        use Perl::Always or die;
        my $perl_version = (5.12.5);
        print $perl_version;

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1062782]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2015-09-01 01:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The oldest computer book still on my shelves (or on my digital media) is ...













    Results (366 votes), past polls