Environmental “Protection” Agency

Since I was young, I’ve always been something of an environmentalist. I haven’t been a passionate environmentalist for years, and here’s why: I gave up. I eventually realized that a government will enact environmental legislation only when it serves them to do so, and that they’ll ignore it when whatever crisis they were protecting themselves against has passed.

It’s a lucky thing I’m not passionate anymore, because if I were, then I would be up in arms right now, yelling in the streets. And nobody wants that.

Here’s what’s gotten under my skin lately: very recently, California attempted to pass environmental regulations much tougher than those mandated nationwide. As California is one of the most polluted states and, paradoxically, one of the most environmentally-conscious — they were the ones, after all, who mandated a quota of zero-emissions (electric) vehicles, before the industry shut them down — this would seem rather logical. And, of course, logic and government don’t mix well, so something went wrong.

I suppose I should learn to expect such things, in this age of do-nothing, get-out-before-the-ship-sinks government, but what happened surprised even cynical old me: the EPA overruled California. Yes, that’s right, I said the EPA. Those letters used to stand for “Environmental Protection Agency.” Given their recent actions, I would recommend we change their meaning to something more appropriate, preferably with a couple of expletives in there. My suggestion is “Excessively Petty Assholes.”

Many will no doubt think this judgment too harsh, but my sordid tale is not finished. California’s regulations were put in place because Californians complain that global warming threatens their water supplies, their agricultures, and — given the increased incidence of forest fires that warming brings — their population. The EPA’s response? “Not on your life!” The EPA actually attempted to claim that there was not a credible threat to justify such harsh local environmental regulations. What!?!? California, as a coastal state, will probably be one of the first states to face a credible threat from global warming. Hell, they’ve already faced a credible threat from global warming! Didn’t they have a terrible fire a few weeks ago?!

It gets worse. The EPA also said that global warming regulations should be nationwide, not local. Right. Because those nationwide regulations were getting passed in a real damned hurry. To me, this looks suspiciously like the current do-nothing administration just buying time until they can inflate their golden parachutes. I just hope that when the forests star to slowly burn away, the coastlines flood and erode as the icecaps melt, the North Atlantic current breaks down, freezing Britain under an ice-age glacier, and the water-shortage wars in Africa and the Middle East spread worldwide, that the fifty years of environmentally-ignorant politicians we’ve suffered through are mostly still alive, so that with whatever breath the toxic atmosphere will allow us, we can all point and laugh at them.

Hm…that was a bit cynical even for me. Note to self: don’t write any more posts early in the morning.

Advertisements

Hebbian Neural Networks

Against all odds, I’ve started an A.I. project, and have actually made some progress. I never thought I’d see the day. It’s not a whole lot of progress, but when you’ve been tinkering as long as I have, you learn to take what you can get.

What I’ve got is a fairly simplistic neural network model, utilizing Hebbian learning. That is to say, whenever two neurons in the network happen to be switched on at the same time, their connection gets stronger. For the last week or two, I’ve been tinkering with the parameters and different methods of inputting the data, and I finally have something that performs something roughly like learning.

I feel the need to repeat that last part: roughly like learning. I have no idea if it’s actually learned anything. Sometimes when I test it, it seems to be able to predict simple patterns, and learn how to tell a small prime from a small non-prime. Other times, it becomes so profoundly stupid that it actually anti-learns, refusing to respond to any stimulus even remotely like its training data. And at yet other times, it doesn’t do anything at all.

This last bit is worsened by my habit of taking a perfectly good program, tinkering with it until it becomes unusable, then accidentally saving over the original. The fact that I wrote the program in Python makes that all the worse, since with Python, you have to save the program every time you run it, and I’ve gotten into the bad habit of just pressing F5 without making sure I’ve saved a backup. The end result is that the current version is pretty much nonfunctional.

Still, the very fact that I was able to write an implement a neural network model makes me pretty happy. I’ve always had trouble handling networks, and now it seems that I’ve got something vaguely workable. So, without further ado (or further clichés), I present to you (okay, one more cliché) Hebbian v5.0 (be warned: there is quite a lot of garbage code and artifacts in there, and frankly, I’m too damn lazy to take it out. Hey, if the human genetic code can be full of junk DNA, then why can’t my code?):

(Written in Python 2.43 (I think))

################################################################################
#Hebbian, version 5.0 #
#Written by Asymptote. #
#Feel free to modify and distribute this code (I dont’ know why you’d want to, #
#but hey, whatever makes you happy), as long as you keep this header intact. #
################################################################################

import random
import math

connectivity = []
activation = []
ns = 100

for i in range(0,ns):
activation.append(0.1)

temp = []

for i in range(0,ns):
temp = []
for j in range(0,ns):
temp.append(0)
connectivity.append(temp)

def sign(n):
if n == 0:
return 0
else:
sg = abs(n)/n
return sg

def transmission(act,conn,nsize,thresh):
summ = 0
for a in range(0,nsize-1):
summ = 0
for b in range(0,nsize-1):
summ += act[b] * conn[a][b]
if float(summ)/float(ns) > thresh:
act[a] = 1
else:
act[a] = 0

def hebbian(act,conn,nsize):
for a in range(0,nsize-1):
for b in range(0,nsize-1):
if act[a] == act[b] == 1:
conn[a][b] += sign(conn[a][b]) * 0.1
for a in range(0,nsize-1):
for b in range(0,nsize-1):
conn[a][b] -= sign(conn[a][b]) * 0.01
for a in range(0,nsize-1):
for b in range(0,nsize-1):
if conn[a][b] > 1:
conn[a][b] = 1
if conn[a][b] < -1:
conn[a][b] = -1

def run(act,conn,nsize,thresh,runlength):
for i in range(0,runlength-1):
transmission(act,conn,nsize,thresh)
hebbian(act,conn,nsize)
print act

def actprint(act,nsize):
strg = “”
for a in range(0,nsize-1):
if act[a] == 1:
strg+= “#”
else:
strg += “_”
print strg

def connprint(conn,nsize):
printarr = []
tempstr = “”
for a in range(0,nsize-1):
tempstr = “”
for b in range(0,nsize-1):
if abs(conn[b][a]) > 0.5:
tempstr += “#”
else:
tempstr += “_”
printarr.append(tempstr)
for a in printarr:
print a

def striphex(i):
s=i
h=i%255
h=hex(i)
h=h[2:]
if s<16:
h=”0″+h
return h

from Tkinter import *
root = Tk()
w = Canvas(root,width=1000,height=1000)
w.pack()

def Binary(n):
out = “”
x = n
while x > 0:
out = str(x % 2) + out
x = (int(x / 2))
return out

def make_input(n,ml):
bin = Binary(n)
inarr = []
for i in range(0,len(bin)):
inarr.append(int(bin[i]))
while len(inarr) <= ml – 1:
inarr = [0] + inarr
return inarr

def drawnetwork(numnodes,connectivity):
import random
points = []
for i in range(0,numnodes – 1):
points.append([random.randint(0,1000),random.randint(0,1000)])
for i in range(0,numnodes – 1):
for j in range(0,numnodes – 1):
if abs(connectivity[i][j]) > 0.1:
if i == j:
w.create_line(points[i][0],points[i][1],points[i][0]+25,points[i][1],points[j][0],points[j][1]+25,points[j][0],points[j][1],smooth=TRUE,fill=”#”+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255))))
else:
w.create_line(points[i][0],points[i][1],points[j][0],points[j][1],arrow=LAST,fill=”#”+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255)))+striphex(255-abs(int(connectivity[i][j]*255))))

def drawconn(numnodes,connectivity):
for a in range(0,numnodes-1):
for b in range(0,numnodes-1):
w.create_line(a,b,a+1,b+1,fill=”#”+striphex(255-abs(int(connectivity[a][b]*255)))+striphex(255-abs(int(connectivity[a][b]*255)))+striphex(255-abs(int(connectivity[a][b]*255))))
#drawconn(ns,connectivity)
#drawnetwork(ns,connectivity)
xor = {“00″:0,”01″:1,”10″:1,”11”:0}
#connprint(connectivity,ns)

def isprime(n):
for i in range(2,n-1):
if n % i == 0:
return False
return True

primelist = []

for i in range(2,1000):
if isprime(i) == True:
primelist.append(i)

for i in range(1,1000):
#activation[primelist[i]%ns] = 1
#activation[(ns – primelist[i])% ns – 1] = 1
for a in range(0,ns-1):
if (a + i%2)%10 == 0:
activation[a] = 1
actprint(activation,ns)
hebbian(activation,connectivity,ns)
transmission(activation,connectivity,ns,0.1)
#actprint(activation,ns)
#print “***”

print “*”*100
connprint(connectivity,ns)

#Good threshold = 0.25

drawnetwork(ns,connectivity)
drawconn(ns,connectivity)

mainloop()

The Singularity

For the past few decades, an idea referred to as “the Singularity” has been bantered about by futurists and technologists. Basically, the theory of the Singularity goes something like this:

Given the rapidly accelerating pace of technological advance, and the fact that, eventually, we will develop artificial intelligence capable of driving further technological advance at a faster pace than human beings ever could, we will eventually reach a point in our advancement where the rate of advance accelerates towards infinity.

Now, this idea may sound rather batty, but just consider this: the Universe formed some 13.7 billion years ago. The solar system, about 4.6 billion years ago. Multicellular life: 500 million years ago. Primates: 5 million years ago. Language: 40,000 years ago. Civilization: 10,000 years ago. The Enlightenment: 400 years. The Industrial Revolution: 150 years. Computers: 50 years. The Internet: 10 years. “Web 2.0”: 2-3 years. Each of these paradigm shifts is happening after a shorter and shorter delay, and, unless we manage to wipe ourselves out somehow (not exactly a remote possibility), then it seems that such a rapid acceleration of technological advance is inevitable.

A much better treatment of this idea can be found in Ray Kurzweil’s book The Singularity is Near. A fictionalized version of the idea graces Charles Stross’s (probably the best Singularitarian author I know of) book Accelerando. But, since you were nice enough to visit me in this little pocket of the Internet, I thought I’d give you a condensed timeline of the predicted unfolding of the Singularity:

  • By about 2015: Practical artificial intelligence is created and comes into use. The A.I.’s can’t pass the Turing Test yet, but they’re very useful in many venues, and they’re advancing all the time. Artificial-Intelligence methods are used to design new technologies, sowing the seeds of the Singularity.
  • By about 2030: The first practical neural implants enter the market. These implants enhance human capabilities immensely, marrying the speed and stability of electronic circuits with the redundancy and plasticity of human neurons.
  • By about 2040: Human-level A.I. is born. Computers and robots gain civil rights, and begin competing with their human makers.
  • By about 2050: The aforementioned neural-implant technology combines with artificial intelligence and allows human minds to be “uploaded” and maintained in computers. The merging of mind and machine begins.
  • By the late 21st century: Nonenhanced humans are completely “obsolete.” Computing power continues to increase. Nanotechnology allows computers to infiltrate every part of our lives.
  • The end of the 21st century: The Singularity arrives. All of the computing power on Earth merges into one vast super-intelligence, which begins expanding out into the Universe.
  • Sometime next century: Nanotechnology begins dismantling all the matter in the solar system, and some matter in nearby space. All is converted to “intelligent matter” capable of performing ultrafast calculations for a tiny energy cost.
  • Who Knows When: The Singularity-Consciousness evolves to the point that it is capable of manipulating matter and energy on the smallest scales, and thus “reprogramming the universe.” New universes can be created to escape the inevitable demise of this universe.
  • After That: Consciousness controls the entire Universe, and many beyond it. It can create universes at will, and expand infinitely. Frank Tipler calls this the “Omega Point.” Some Singularitarians call this “God.”

The really creepy thing is that, in all likelihood, I, being a young and fairly healthy person, will live to see this. Barring some sort of unfortunate incident, I — and probably quite a large fraction of my readers, too — will live long enough to be absorbed into the Singularity. And, since we will then be able to escape from our physical bodies, we will live essentially forever.

Food for thought, as usual.

The Giant Rubber-Band Ball

Sometimes, I am compelled to do things. Sometimes, as in the case of National Novel-Writing Month, these compulsions allow me to produce neat things like novels. But, at other times, they just compel me to waste a Sunday afternoon making, say, a giant rubber-band ball.

Giant Rubber-Band Ball

What you are looking at is the result of two or three afternoons’ effort. So far, the ball consists of the contents of two OfficeMax one-pound bags of assorted rubber bands, in addition to a core of miscellaneous bands I had sitting around the house. Here’s another picture, this one with a quarter for comparison.

Giant Rubber-Band Ball

My ultimate goal is to (eventually) build the ball up to the size of a basketball. Then, if I haven’t worn my fingers down to stumps or been locked in a padded cell, I might consider going for the world record. I wonder how big the world’s biggest rubber band ball is?

That right there is proof that, no matter what you do, a nerd (such as myself) always manages to have too much time on his hands. That’s the result of eschewing all semblances of a social life…