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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +100 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/pavement_condition_index/cdv_iteration.rb +30 -0
- data/lib/pavement_condition_index/core_ext/numeric.rb +5 -0
- data/lib/pavement_condition_index/distress_group.rb +37 -0
- data/lib/pavement_condition_index/lookups/calculated_corrected_deduct_coefficients.rb +50 -0
- data/lib/pavement_condition_index/lookups/calculated_deduct_coefficients.rb +568 -0
- data/lib/pavement_condition_index/lookups/corrected_deduct_values.rb +23 -0
- data/lib/pavement_condition_index/lookups/deduct_values.rb +27 -0
- data/lib/pavement_condition_index/lookups/observed_corrected_deduct_values.rb +65 -0
- data/lib/pavement_condition_index/lookups/observed_deduct_values.rb +446 -0
- data/lib/pavement_condition_index/pci.rb +42 -0
- data/lib/pavement_condition_index/sample_unit_condition_survey/asphalt_survey.rb +15 -0
- data/lib/pavement_condition_index/sample_unit_condition_survey/base_survey.rb +71 -0
- data/lib/pavement_condition_index/sample_unit_condition_survey/concrete_survey.rb +15 -0
- data/lib/pavement_condition_index/section_condition_survey.rb +51 -0
- data/lib/pavement_condition_index/version.rb +3 -0
- data/lib/pavement_condition_index.rb +23 -0
- data/lib/tasks/regression.rake +121 -0
- data/pavement_condition_index.gemspec +24 -0
- metadata +114 -0
@@ -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: []
|