View Single Post
  #2  
Old 04-06-2008, 11:57 AM
lpetrich's Avatar
lpetrich lpetrich is offline
 
Join Date: Mar 2008
Location: Lebanon, OR
Posts: 61
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That would be a great idea. I'm fairly proficient in coding, and it should not be difficult to code by someone proficient at writing web apps or some of the vBulletin mods that some people have created.

In fact, vBulletin already supports one alternative to first-past-the-post: approval voting. You select it by selecting "allow multiple choices" in the poll-setup options. And instead of being a line of radio buttons, the poll becomes a line of checkboxes that can be selected independently.

Single-choice - radio buttons - first-past-the-post
Multiple-choice - checkboxes - approval voting

These two possibilities require no client-side JavaScript; only standard HTML forms objects. The only server-side coding necessary is simple adding up.


A fancier version of approval voting is range voting, where each option now gets a popup menu indicating the rating that you can give it, like 1, 2, 3, 4, 5 or -1, 0, 1. As with the others, no client-side coding and only simple server-side coding is necessary. Approval voting and range voting are special cases of "rated voting".


With popups, one can indicate preference order, thus making possible preference voting. But one has to enforce preference order, though that can easily be done on the client side with appropriate JavaScript code. If that code is is not executed, then one can do server-side checking as a backup. However, the vote counting is all server-side, as before.

The Borda count is fairly simple. For n options, the top preference gets rating (n-1), the next-from-top (n-2), etc., and the votes are counted in the usual way.

The Condorcet method interprets each voter's preference ranking as a set of comparisons of all possible pairs of options; the results of these comparisons are added to a table of how many times which option beat which option. This, this approach is sometimes called "Virtual Round Robin" or "Instant Round Robin."

From this table one finds an overall preference ranking, using some algorithm to disambiguate circular cases like A > B > C > A. There are several algorithms that have been developed for that; the most popular one is the Schulze algorithm.

In Instant Runoff Voting, the vote counting is done in rounds. In each round, the voters' highest-preferred options are counted up, and the option that gets the least votes gets dropped. Each vote is then searched to find the highest undropped preference. The rounds continue until one option gets the majority of the vote.

One can extend Instant Runoff Voting to multiple winners with the single transferable vote. A victory threshold is set at (total votes)/((number of winners) + 1), and the counting works as in IRV, but with winners as well as losers dropping out. An option wins if it is over the threshold; its extra votes get used for continued counting.


I am willing to assist anyone who might be interested in coding a preference-voting add-on for vBulletin; I have experience with JavaScript but not with PHP or SQL or vBulletin internals. Please PM me if you would wish my assistance.


Some preference-poll sites:
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01232 seconds
  • Memory Usage 1,780KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete