steemrewarding.com - vote delay optimization added

rewarding_batch2.png

Repository

https://github.com/holgern/steemrewarding

steemrewarding.com is a feature-rich automatic voting tool. It can be used to create voting rules at https://steemrewarding.com, when posting authority was given to the @rewarding account. I created a discord server for all topics regarding steemrewarding.com: discord invitation.

steemrewarding is currently used by 126 users which created 1193 rules for posts, 85 rules for comments and 24 trail vote rules. In the last 7 days were 4244 time based votes and 1986 vp based votes broadcasted through steemrewarding.

New Features

New rules can be directly created by entering steemrewarding.com/@author in the browser

When entering a steem account name after stemrewarding.com, a new rule can be directly be created. For example, https://steemrewarding.com/@utopian-io
will open the new rule editor:
image.png

Vote delay optimization

A user of steemrewarding.com can now optimize the vote delay time for all time based vote rules automatically. The optimization must be enabled in https://steemrewarding.com/settings:
image.png

When enabled, each vote_log is analyed in the calc_curation_performance.py script.

best_performance = 0
best_vote_delay_min = 0
for v in c["active_votes"]:
    v_SBD = stm.rshares_to_sbd(int(v["rshares"]))
    if v_SBD > 0 and int(v["rshares"]) > rshares * 0.5:
        
        p = float(curation_rewards_SBD["active_votes"][v["voter"]]) / v_SBD * 100
        if p > best_performance:
            best_performance = p
            best_vote_delay_min = ((v["time"]) - c["created"]).total_seconds() / 60

All given votes to the upvoted post/comment that have at least half the rshares of the rule creator are analyed. When there is a single vote that have a better performance, its vote delay time and its performance is stored.

The values are shown in the vote log https://steemrewarding.com/show_vote_log:
image.png

A vote delay time is optimized when

  • the actual vote delay is near the set vote delay (time difference below 1 minute)
  • optimize_vote_delay is enabled unter settings
  • disable_optimization is not enabled for the rule
  • the initial vote delay is between minimum_vote_delay and maximum_vote_delay

minimum_vote_delay and maximum_vote_delay can be set at steemrewarding.com/settings
image.png

When a best_performance and best_vote_delay_min was found for a vote rule log entry, the vote delay is optimized by:

minimum_vote_delay = acc_data["minimum_vote_delay"]
maximum_vote_delay = acc_data["maximum_vote_delay"]
optimize_threshold = 1 + (acc_data["optimize_threshold"] / 100)
optimize_ma_length = acc_data["optimize_ma_length"]

    
vote_rule = voteRulesTrx.get(vote_log["voter"], c["author"], c.is_main_post())
if vote_rule is not None and not vote_rule["disable_optimization"]:
    vote_delay_min = vote_rule["vote_delay_min"]
    if best_performance > performance * optimize_threshold and vote_delay_min <= maximum_vote_delay and vote_delay_min >= minimum_vote_delay:
        if optimize_ma_length > 1:
            vote_delay_min = (vote_delay_min * (optimize_ma_length - 1) + best_vote_delay_min) / optimize_ma_length
        else:
            vote_delay_min = best_vote_delay_min
        if vote_delay_min > maximum_vote_delay:
            vote_delay_min = maximum_vote_delay
        elif vote_delay_min < minimum_vote_delay:
            vote_delay_min = minimum_vote_delay
        voteRulesTrx.update({"voter": vote_log["voter"], "author": c["author"], "main_post": c.is_main_post(),
                             "vote_delay_min": vote_delay_min})
        vote_log["optimized_vote_delay_min"] = vote_delay_min

When the optimal vote delay differs less than optimize_threshold percentage from the old one, the vote delay is not changed. This prevents that the vote delay time from jittering.

A simplified moving average calculation is then used to update the vote delay time. The influence of the optimal voting time is set by optimize_ma_length. When it is set to 20, it will take 20 steps approach a new optimum.

He is an example, that show how it works:
image.png
I set the vote delay to 13 minutes, the best vote delay is at 8.2 minutes. The new vote delay is then:
(( optimize_ma_length - 1) * 13 min + 8.2 min) / optimize_ma_length
which is for optimize_ma_length=20 12.76 minutes. This means that the vote delay for my rule is reduced in order to approach the optimal vote time.

The parameter optimize_ma_length and optimize_threshold can be set in steemrewarding.com/settings

image.png

Commits

Add vote optimization for all time based votes

Add option to add a rule by adding an account to steemrewarding.com (e.g. https://steemrewarding.com/@holger80)

GitHub Account

https://github.com/holgern

H2
H3
H4
Upload from PC
Video gallery
3 columns
2 columns
1 column
17 Comments