The only reason I used following solution, was because we didn't need to make a product type for variety of options we had, and we had a lot of options which didn't make sense to make it as individual product.
I used rules, if any one find better solution let me know, hope it will help someone.
1) defined an action function to multiply the price to a coefficient
2) checked to see what option has been selected and proper coefficient has been applied
/**
* Rules action: multiply the unit price by some amount.
*/
function modulename_unit_price_multiply($line_item, $amount, $component_name, $round_mode) {
if (is_numeric($amount)) {
// Coefficient variable
$cf = '1';
if(isset($line_item->field_color[LANGUAGE_NONE][0]['value'])){
$selected_color = $line_item->field_color[LANGUAGE_NONE][0]['value'];
switch ($selected_color){
case 'red':
$cf *= 2;
break;
case 'black':
$cf *= 3;
break;
case 'blue':
$cf *= 4;
break;
}
} else {
$cf *= '1';
}
$wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
$unit_price = commerce_price_wrapper_value($wrapper, 'commerce_unit_price', TRUE);
// Calculate the updated amount and create a price array representing the
// difference between it and the current amount.
$current_amount = $unit_price['amount'];
$updated_amount = commerce_round($round_mode, $current_amount * $amount * $cf);
$difference = array(
'amount' => $updated_amount - $current_amount,
'currency_code' => $unit_price['currency_code'],
'data' => array(),
);
// Set the amount of the unit price and add the difference as a component.
$wrapper->commerce_unit_price->amount = $updated_amount;
$wrapper->commerce_unit_price->data = commerce_price_component_add(
$wrapper->commerce_unit_price->value(),
$component_name,
$difference,
TRUE
);
}
}