pavement_condition_index 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,121 @@
1
+ require 'pavement_condition_index/lookups/observed_deduct_values'
2
+ require 'pavement_condition_index/lookups/observed_corrected_deduct_values'
3
+ require 'pp'
4
+ require 'matrix'
5
+
6
+ namespace :regression do
7
+
8
+ task :generate_deduct_coefficients do
9
+ output = PavementConditionIndex::Lookups::ObservedDeductValues::OBSERVED_VALUES.map do |pavement_type_key,pavement_type_values|
10
+ remapped_pavement_type_values = pavement_type_values.map do |distress_type_key,distress_type_values|
11
+ coefficients = {low: nil, medium: nil, high: nil}.map do |severity_key,coefficient|
12
+ polynomial_degree = 0
13
+ @candidate_coefficients = []
14
+ @x_values = distress_type_values[:chart_type] == :log ? distress_type_values[:x_values].map {|x| Math.log10(x)} : distress_type_values[:x_values]
15
+ loop do
16
+ polynomial_degree += 1
17
+ @candidate_coefficients = regress_polynomial(@x_values,distress_type_values[:expected_y_values][severity_key],polynomial_degree)
18
+ candidate_y_values = @x_values.map {|x| evaluate_polynomial(*@candidate_coefficients).call(x) }
19
+ sum_of_squares = 0.0
20
+ distress_type_values[:x_values].each_with_index do |x, index|
21
+ sum_of_squares += (candidate_y_values[index] - distress_type_values[:expected_y_values][severity_key][index])**2
22
+ end
23
+ break if sum_of_squares < 10.0
24
+ end
25
+ [severity_key, @candidate_coefficients]
26
+ end.to_h
27
+ remapped_distress_type_values = {
28
+ valid_min: distress_type_values[:valid_min],
29
+ valid_max: distress_type_values[:valid_max],
30
+ chart_type: distress_type_values[:chart_type],
31
+ coefficients: coefficients
32
+ }
33
+ [distress_type_key,remapped_distress_type_values]
34
+ end.to_h
35
+ [pavement_type_key,remapped_pavement_type_values]
36
+ end.to_h
37
+ pp output
38
+ end
39
+
40
+ task :generate_corrected_deduct_coefficients do
41
+ output = PavementConditionIndex::Lookups::ObservedCorrectedDeductValues::OBSERVED_VALUES.map do |pavement_type_key,pavement_type_values|
42
+ coefficients = pavement_type_values[:expected_y_values].map do |q_value_key,observed_values|
43
+ polynomial_degree = 0
44
+ @candidate_coefficients = []
45
+ @x_values = pavement_type_values[:x_values]
46
+ loop do
47
+ polynomial_degree += 1
48
+ @candidate_coefficients = regress_polynomial(@x_values,observed_values,polynomial_degree)
49
+ candidate_y_values = @x_values.map {|x| evaluate_polynomial(*@candidate_coefficients).call(x) }
50
+ sum_of_squares = 0.0
51
+ pavement_type_values[:x_values].each_with_index do |x, index|
52
+ sum_of_squares += (candidate_y_values[index] - observed_values[index])**2
53
+ end
54
+ break if sum_of_squares < 10.0
55
+ end
56
+ [q_value_key, @candidate_coefficients]
57
+ end.to_h
58
+ remapped_pavement_type_values = {
59
+ coefficients: coefficients
60
+ }
61
+ [pavement_type_key,remapped_pavement_type_values]
62
+ end.to_h
63
+ pp output
64
+ end
65
+
66
+ task :generate_calculated_deduct_coefficients_file do
67
+ header =
68
+ "# generate this whole file by running the following command:\n"+
69
+ "# rake regression:generate_calculated_deduct_coefficients_file > lib/pavement_condition_index/lookups/calculated_deduct_coefficients.rb\n"+
70
+ "\n"+
71
+ "module PavementConditionIndex\n"+
72
+ " module Lookups\n"+
73
+ " class CalculatedDeductCoefficients\n"+
74
+ "\n"+
75
+ "# Output of `rake regression:generate_deduct_coefficients`\n"+
76
+ "COEFFICIENTS = "
77
+ puts header
78
+
79
+ Rake::Task["regression:generate_deduct_coefficients"].invoke
80
+
81
+ footer =
82
+ " end\n"+
83
+ " end\n"+
84
+ "end\n"
85
+ puts footer
86
+ end
87
+
88
+ task :generate_calculated_corrected_deduct_coefficients_file do
89
+ header =
90
+ "# generate this whole file by running the following command:\n"+
91
+ "# rake regression:generate_calculated_corrected_deduct_coefficients_file > lib/pavement_condition_index/lookups/calculated_corrected_deduct_coefficients.rb\n"+
92
+ "\n"+
93
+ "module PavementConditionIndex\n"+
94
+ " module Lookups\n"+
95
+ " class CalculatedCorrectedDeductCoefficients\n"+
96
+ "\n"+
97
+ "# Output of `rake regression:generate_corrected_deduct_coefficients`\n"+
98
+ "COEFFICIENTS = "
99
+ puts header
100
+
101
+ Rake::Task["regression:generate_corrected_deduct_coefficients"].invoke
102
+
103
+ footer =
104
+ " end\n"+
105
+ " end\n"+
106
+ "end\n"
107
+ puts footer
108
+ end
109
+ end
110
+
111
+ def regress_polynomial x, y, degree
112
+ rows = x.map do |i|
113
+ (0..degree).map { |power| (i ** power).to_f }
114
+ end
115
+ mx, my = Matrix.rows(rows), Matrix.columns([y])
116
+ ((mx.transpose * mx).inv * mx.transpose * my).transpose.row(0).to_a
117
+ end
118
+
119
+ def evaluate_polynomial(*coefficients)
120
+ Proc.new {|x| coefficients.map.with_index{|c,i| c*(x**i)}.reduce(:+)}
121
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "pavement_condition_index/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pavement_condition_index"
8
+ spec.version = PavementConditionIndex::VERSION
9
+ spec.authors = ["Andy Monroe", "Nate Clark"]
10
+ spec.email = ["hello@brandnewbox.com"]
11
+
12
+ spec.summary = %q{Summary}
13
+ spec.homepage = "https://github.com/brandnewbox/pavement_condition_index"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.15"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.0"
24
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pavement_condition_index
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Andy Monroe
8
+ - Nate Clark
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2017-08-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.15'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.15'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.0'
56
+ description:
57
+ email:
58
+ - hello@brandnewbox.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - lib/pavement_condition_index.rb
73
+ - lib/pavement_condition_index/cdv_iteration.rb
74
+ - lib/pavement_condition_index/core_ext/numeric.rb
75
+ - lib/pavement_condition_index/distress_group.rb
76
+ - lib/pavement_condition_index/lookups/calculated_corrected_deduct_coefficients.rb
77
+ - lib/pavement_condition_index/lookups/calculated_deduct_coefficients.rb
78
+ - lib/pavement_condition_index/lookups/corrected_deduct_values.rb
79
+ - lib/pavement_condition_index/lookups/deduct_values.rb
80
+ - lib/pavement_condition_index/lookups/observed_corrected_deduct_values.rb
81
+ - lib/pavement_condition_index/lookups/observed_deduct_values.rb
82
+ - lib/pavement_condition_index/pci.rb
83
+ - lib/pavement_condition_index/sample_unit_condition_survey/asphalt_survey.rb
84
+ - lib/pavement_condition_index/sample_unit_condition_survey/base_survey.rb
85
+ - lib/pavement_condition_index/sample_unit_condition_survey/concrete_survey.rb
86
+ - lib/pavement_condition_index/section_condition_survey.rb
87
+ - lib/pavement_condition_index/version.rb
88
+ - lib/tasks/regression.rake
89
+ - pavement_condition_index.gemspec
90
+ homepage: https://github.com/brandnewbox/pavement_condition_index
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.5.1
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Summary
114
+ test_files: []