he workshops focus on a variety of different advanced digital design platforms related to environmental analysis, BIM, parametric design, GIS, responsive systems, and urban/landscape design.
Eligibility: The workshops are open to all students and professionals in the design fields. Please review the specific experience requirements for each workshop in the full workshop descriptions.
Cost: Each workshop costs $75/$150 for students/professionals. [Registration will be online on Monday, March 1]
Hardware and Software: Attendees must bring their own laptop to the workshop. Workshop instructors will make available trial versions of the software.
Location: All workshops will be held on the CCA San Francisco Campus in the Graduate Center.
Parametric Modeling with Grasshopper I
Date: March 5, 10am-5pm
Instructor: Ben Golder (developer of Finches plugin)
Parametric Modeling with Grasshopper II
Date: March 12, 10am-5pm
Instructor: Ben Golder
(developer of Finches plugin)
Intro to Physical Computing with Arduino
Date: March 5, 10am-5pm
Instructors: Jason Kelly Johnson (CCA/FCL and co-developer of Firefly plugin), with Rip DeLeon (FCL)]
Conceptual Modeling Tools in REVIT
Date: March 12, 10am-5pm
Instructor: Charles Lee (HOK, BIOS Design Collective)
Environmental Analysis in Ecotect
Date: March 5, 10am-5pm
Instructor: Olivier Pennetier of Symphysis
ESRI ArcGIS I: Mapping and Analyzing Urban Information
Date: March 5, 2-9pm
Instructor: Richard M. Kos, AICP
ESRI ArcGIS II: 3D Analyst and ArcScene
Date: March 12, 2-9pm
Instructors: Richard M. Kos, AICP and Mona El Khafif (URBANlab)
Advanced Illustrator for Urban Ecologies
Date: March 5, 10am-5pm
Instructor: David Fletcher (Fletcher Studio, URBANlab)…
serveral questions:the first thing is in c++ i have to implement more methods than in my c# test project.
they are:
int MyGhComponent::MasterParameterIndex::get(){ return 0;}void MyGhComponent::MasterParameterIndex::set(int index){ }bool MyGhComponent::IsValidMasterParameterIndex::get(){ return 1;}
i found no hint for the implementation of that interfaces. could someone tell me that is correct ?OK, it works, but is it well writen ? What is the MasterParameterIndex?
the second "bigger" problem is, i want to have an output of an pointlist.X y Z 1.2 1.3 1.12.1 5.2 9.2...
my first approch was to use a
void MyGhComponent::RegisterOutputParams(GH_Component::GH_OutputParamManager^ pManager){pManager->Register_PointParam("Coordinate", "XYZ", "Node-Coordinate");}
and
void MyGhComponent::SolveInstance(IGH_DataAccess^ DA){Collections::Generic::List<GH_IO::Types::GH_Point3D>^ pnt = gcnew Collections::Generic::List<GH_IO::Types::GH_Point3D>(); for (int i = 0; i < 10; i++) { GH_IO::Types::GH_Point3D^ point = gcnew GH_IO::Types::GH_Point3D(i, i, i); pnt->Add(i); } DA->SetDataList(3, pnt);}
but this exampel doesn't work...i wirte a small workaround and use the following
pManager->Register_DoubleParam("X-Koordinate", "X", "X"); pManager->Register_DoubleParam("Y-Koordinate", "Y", "Y"); pManager->Register_DoubleParam("Z-Koordinate", "Z", "Z"); Collections::Generic::List<double>^ pntx= gcnew Collections::Generic::List<double>(); Collections::Generic::List<double>^ pnty= gcnew Collections::Generic::List<double>(); Collections::Generic::List<double>^ pntz= gcnew Collections::Generic::List<double>(); ... add .. ect.
this workaround do the job, but i want a better soulution. and i know somewhere out there sould be a better solution. i want to use 3D Points directly in GH without list conversation.
so somebody a familiar with c++ / cli ? and could give me some tipps or a soulution ?
the first thing is: what is the right RegisterOutputParams ?
and witch data type is the right ? Point3d doesn't work. so i try GH_IO::Types::GH_Point3D and Rhino::Geometry::Point3d ...
br Friedrich…
arq, que se celebrará entre el 28 de Enero y el 1 de Febrero de 2013 en el Colegio de Arquitectos de Granada.
El taller está destinado a arquitectos, artistas y diseñadores, tanto como profesionales, como estudiantes de grado y posgrado, que, sin necesidad de haber tenido ningún contacto previo con entornos de programación o herramientas informáticas de dibujo paramétrico o generativo, están interesados en probar y experimentar con las opciones que nos pueden ofrecer a los diseñadores.
El taller está dividido en tres bloques:
Curso intensivo: del 28 de Enero al 30 de Febrero, en horario de mañana, de 10 a 14. Taller de proyectos: del 28 de Enero al 30 de Febrero, por la tarde, de 16 a 20; y el 31 de Febrero, durante todo el día.
Presentaciones: viernes 1 de Febrero, mañana y tarde.
Utilizaremos Grasshopper, el editor algorítmico asociado al software de modelado tridimensional y dibujo Rhinoceros, por su facilidad de aprendizaje, al tratarse de un entorno gráfico, facilidad de adquisición, al ser gratuito y haber disponible una versión de prueba de Rhinoceros también gratuita, y amplia difusión en los últimos años. Y lo emplearemos tanto como modelador, como conector entre otros softwares y varias disciplinas. Por este motivo, también utilizaremos algunos de sus plug-ins, como Geco, para análisis ambiental, Elk, para enlazarlo con OpenStreetMap o Kangaroo, para simulación de sistemas físicos.
Lo único que necesitas es un ordenador portátil (si no pudieras conseguir), hacer el ingreso con el importe correspondiente y mandarnos tus datos y el recibo bancario del ingreso a smartlabgranada@gmail.com. Puedes ver los detalles en el apartado de Inscripción. El resto del material, tanto software como hardware, lo ponemos nosotros.
Nuestro acercamiento a estas herramientas es entusiasta acerca del potencial creativo que pueden ofrecer a diseñadores y artistas, pero también crítico y especulativo. Nos alejamos tanto de una posición puramente formalista, como del estricto funcionalismo, a los que desde los últimos años frecuentemente se ha asociado a esta disciplina.…
Added by Miguel Vidal at 8:42am on January 19, 2013
and where the decimal place should be.
The reason it only shows the first 5 numbers that make up 1,000,000 is because anything smaller than 100 is considered insignificant when talking about 1 million. Think of it like this if 1 million represents an Olympic size swimming pool then 10 would represent the volume of a full tank of petrol for an average family car. You would have to stand there for an extremely long time to fill up the pool from a petrol pump.
It's important to know that these insignificant digits are still there for the purpose of calculations but are just not being displayed.
There are times when you may want to display these numbers in a format that makes more sense, for these occasions we can use the Format() function.
Format() Function
For versions BEFORE 0.9.0001 the VB Format Function is available through the Expression Components found on the Math Tab > Script Panel
Either by using the F input* or the Expressions Editor found on the Context Menu you can apply a format mask to the x input.
* except FxN
Anatomy of the formatting function above:
Format(..............................) <-- VB function
Format("........................."....) <-- Display String
Format("{0....................}"....) <-- Place Holder for first variable
Format("{0:0.000000000}"...) <-- Format Mask for 9 decimal places
Format("{0:0.000000000}", x) <-- Variable
This can be applied to points and their components:
For versions AFTER 0.9.0001 there is a dedicated Format Component or you can use the Expressions Components successor Evaluate.
For more information on the tags used in the Format Function see these links.
Standard formatting tags Custom formatting tags
WARNING:
If you format a number to be displayed in this way it becomes a string and will no longer have the complete Real number available for calculations. Always use the input to the format function for further requirements in calculations.…
lly it should not make much of a difference - random number generation is not affected, mutation also is not. crossover is a bit more tricky, I use Simulated Binary Crossover (SBX-20) which was introduced already in 1194:
Deb K., Agrawal R. B.: Simulated Binary Crossover for Continuous Search Space, inIITK/ME/SMD-94027, Convenor, Technical Reports, Indian Institue of Technology, Kanpur, India,November 1994
Abst ract. The success of binary-coded gene t ic algorithms (GA s) inproblems having discrete sear ch sp ace largely depends on the codingused to represent the prob lem variables and on the crossover ope ratorthat propagates buildin g blocks from pare nt strings to childrenst rings . In solving optimization problems having continuous searchspace, binary-co ded GAs discr et ize the search space by using a codingof the problem var iables in binary st rings. However , t he coding of realvaluedvari ables in finit e-length st rings causes a number of difficulties:inability to achieve arbit rary pr ecision in the obtained solution , fixedmapping of problem var iab les, inh eren t Hamming cliff problem associatedwit h binary coding, and processing of Holland 's schemata incont inuous search space. Although a number of real-coded GAs aredevelop ed to solve optimization problems having a cont inuous searchspace, the search powers of these crossover operators are not adequate .In t his paper , t he search power of a crossover operator is defined int erms of the probability of creating an arbitrary child solut ion froma given pair of parent solutions . Motivated by t he success of binarycodedGAs in discret e search space problems , we develop a real-codedcrossover (which we call the simulated binar y crossover , or SBX) operatorwhose search power is similar to that of the single-point crossoverused in binary-coded GAs . Simulation results on a number of realvaluedt est problems of varying difficulty and dimensionality suggestt hat the real-cod ed GAs with t he SBX operator ar e ab le to perform asgood or bet t er than binary-cod ed GAs wit h t he single-po int crossover.SBX is found to be particularly useful in problems having mult ip le optimalsolutions with a narrow global basin an d in prob lems where thelower and upper bo unds of the global optimum are not known a priori.Further , a simulation on a two-var iable blocked function showsthat the real-coded GA with SBX work s as suggested by Goldberg
and in most cases t he performance of real-coded GA with SBX is similarto that of binary GAs with a single-point crossover. Based onth ese encouraging results, this paper suggests a number of extensionsto the present study.
7. ConclusionsIn this paper, a real-coded crossover operator has been develop ed bas ed ont he search characte rist ics of a single-point crossover used in binary -codedGAs. In ord er to define the search power of a crossover operator, a spreadfactor has been introduced as the ratio of the absolute differences of thechildren points to that of the parent points. Thereaft er , the probabilityof creat ing a child point for two given parent points has been derived forthe single-point crossover. Motivat ed by the success of binary-coded GAsin problems wit h discrete sear ch space, a simul ated bin ary crossover (SBX)operator has been develop ed to solve problems having cont inuous searchspace. The SBX operator has search power similar to that of the single-po intcrossover.On a number of t est fun ctions, including De Jong's five te st fun ct ions, ithas been found that real-coded GAs with the SBX operator can overcome anumb er of difficult ies inherent with binary-coded GAs in solving cont inuoussearch space problems-Hamming cliff problem, arbitrary pr ecision problem,and fixed mapped coding problem. In the comparison of real-coded GAs wit ha SBX operator and binary-coded GAs with a single-point crossover ope rat or ,it has been observed that the performance of the former is better than thelatt er on continuous functions and the performance of the former is similarto the lat ter in solving discret e and difficult functions. In comparison withanother real-coded crossover operator (i.e. , BLX-0 .5) suggested elsewhere ,SBX performs better in difficult test functions. It has also been observedthat SBX is particularly useful in problems where the bounds of the optimum
point is not known a priori and wher e there are multi ple optima, of whichone is global.Real-coded GAs wit h t he SBX op erator have also been tried in solvinga two-variab le blocked function (the concept of blocked fun ctions was introducedin [10]). Blocked fun ct ions are difficult for real-coded GAs , becauselocal optimal points block t he progress of search to continue towards t heglobal optimal point . The simulat ion results on t he two-var iable blockedfunction have shown that in most occasions , the sea rch proceeds the way aspr edicted in [10]. Most importantly, it has been observed that the real-codedGAs wit h SBX work similar to that of t he binary-coded GAs wit h single-pointcrossover in overcoming t he barrier of the local peaks and converging to t heglobal bas in. However , it is premature to conclude whether real-coded GAswit h SBX op erator can overcome t he local barriers in higher-dimensionalblocked fun ct ions.These results are encour aging and suggest avenues for further research.Because the SBX ope rat or uses a probability distribut ion for choosing a childpo int , the real-coded GAs wit h SBX are one st ep ahead of the binary-codedGAs in te rms of ach ieving a convergence proof for GAs. With a direct probabilist ic relationship between children and parent points used in t his paper,cues from t he clas sical stochast ic optimization methods can be borrowed toachieve a convergence proof of GAs , or a much closer tie between the classicaloptimization methods and GAs is on t he horizon.
In short, according to the authors my SBX operator using real gene values is as good as older ones specially designed for discrete searches, and better in continuous searches. SBX as far as i know meanwhile is a standard general crossover operator.
But:
- there might be better ones out there i just havent seen yet. please tell me.
- besides tournament selection and mutation, crossover is just one part of the breeding pipeline. also there is the elite management for MOEA which is AT LEAST as important as the breeding itself.
- depending on the problem, there are almost always better specific ways of how to code the mutation and the crossover operators. but octopus is meant to keep it general for the moment - maybe there's a way for an interface to code those things yourself..!?
2) elite size = SPEA-2 archive size, yes. the rate depends on your convergence behaviour i would say. i usually start off with at least half the size of the population, but mostly the same size (as it is hard-coded in the new version, i just realize) is big enough.
4) the non-dominated front is always put into the archive first. if the archive size is exceeded, the least important individual (the significant strategy in SPEA-2) are truncated one by one until the size is reached. if it is smaller, the fittest dominated individuals are put into the elite. the latter happens in the beginning of the run, when the front wasn't discovered well yet.
3) yes it is. this is a custom implementation i figured out myself. however i'm close to have the HypE algorithm working in the new version, which natively has got the possibility to articulate perference relations on sets of solutions.
…
helped to make grasshopper a great platform for research and design in parametric design and fabrication including, Andy Payne, Daniel Piker, and Ronnie Parsons and Gil Akos from Studio Mode. In addition, this is the first AA Summer program to happen in the US and will bring many faculty and students from the EmTech program to San Francisco.
Here is the whole description:
BIODYNAMIC STRUCTURES AA Visiting School @ CCA California College of the Art Monday 12 to Wednesday 21 July, 2010
Biodynamics is the study of the force and energy of dynamic processes on living organisms. Through simple mechanisms embedded within the material logic of natural systems, specific stimuli can activate a particular response. This response occurs in carnivorous plants such as the Venus fly-trap, which uses turgor pressure to trap small insects in order to feed, and worms, which by contracting differently oriented muscles, achieve movement. This ten-day intensive workshop, co-taught by the faculty of the Emergent Technologies and Design Programme at the AA and the faculty of Architecture and MEDIAlab at California College of the Arts, will explore active systems in nature, investigating biomimetic principles in order to analyze, design and fabricate prototypes that respond to electronic and environmental stimuli. Students will work in teams to research specific biological systems, extracting logics of organization, geometry, structure and mathematics. Advanced analysis, simulation, modeling and fabrication tools will be introduced in order to apply this information to the design of both passive and active responsive architectural systems. Investigation and application of robotics, sensors and actuators will be employed for the activation of the material system investigation through the construction of working responsive prototypes.
+ CONTENT TAGS: Biodynamic, Parametric, Scripted, Mimetic, Responsive, Interactive, Digitally Fabricated
+ SOFTWARE: Rhino, Grasshopper, Firefly, RhinoScript, Arduino, Processing
CORE FACULTY
Michael Weinstock (Academic Head, Director of Emergent Technologies Programme, AA London UK)
Christina Doumpioti, Evan Greenberg, Konstantinos Karatzas (Tutors, AA EmTech Programme, London UK)
Jason Kelly Johnson (Future Cities Lab), Andrew Kudless (Matsys) (CCA MediaLab Coordinators, SF CA)
ASSOCIATED FACULTY
George Jeronimidis (Director of Center for Biomimetics, University of Reading UK); Andrew Payne (LIFT Architects, Grasshopper Primer); Daniel Segraves (ASGG Adrian Smith + Gordon Gill Architecture); Ronnie Parsons + Gil Akos (Studio Mode, NY); Daniel Piker (Kangaroo Project Live Physics)
ASSOCIATED LECTURERS:
Thom Faulders (Faulders Studio, San Francisco CA); Lisa Iwamoto and Craig Scott (Iwamoto/Scott Architects, San Francisco CA); David Gissen (HTC Experiments/CCA); Ila Berman (CCA Director of Architecture); Wendy Ju (CCA/Stanford University); Andrew Sparks (CCA); Nataly Gattegno (Future Cities Lab, San Francisco CA);
ENROLLMENT INFORMATION:
http://sanfrancisco.aaschool.ac.uk/; or visit the CCA MEDIAlab website: http://mlab.cca.edu
(Workshops are non-credit. Enrollment is processed by the AA. Workshop will run the full 10 days.)
CCA Faculty Coordinators: Jason Kelly Johnson and Andrew Kudless
AA Microblog Site: http://sanfrancisco.aaschool.ac.uk/
twitter: bioworkshopsf
Contact
visitingschool@aaschool.ac.uk or mlab@cca.edu
Downloads
Application Form…
ight be able to provide more insight). Whenever you run a new simulation in Radiance, it is not always necessary to re-write all of the initial simulation files from scratch. These initial simulation files include both a .rad geometry file as well as a separate .pts file that contains the test point locations. If all that you are changing in a given parametric run is the locations of the test points (like your case), it is not necessary to re-write (or reinterpret) the entire .rad geometry file. My guess is that there is some type of check for this built into either code Mostapha wrote or radiance functions that Mostapha is calling. As such, it seems that the rad geometry file is not being re-written (or re-interpreted by radiance) completely when all that you change is the test points and this actually seems to be saving you an extra 10 seconds each time that you run the component without changing the materials or the building geometry. Other times (like when you plug in custom radParameters), it seems that it re-writes (or re-interprets) the .rad geometry file from scratch since this file is probably affected by customized rad parameters.
So far, if this explanation is holding, it seems like there would be no concern on your end but I also recognize that the difference between these long and short simulations is giving you radiation results that are ever so slightly different from each other (by my estimates, they differ by about 0.2%). Compared to the other types of assumptions that the radiance model is making, though, these are mere rounding errors that probably originate from the number of decimal places in the vertices of the rad geometry file. Rather than worrying about whether your simulations are giving you the right rounding errors to give you matching results, I would encourage you to instead contemplate how much your radiance results are matching reality given all of the assumptions that you are making about the climate (with the epw file for a "typical" year) and with the number of light bounces in the radiance simulation. To give you an example, I ran your model with a higher quality of simulation type (3 ambient bounces) and this gives you results that differ by 1.1% from the original simulation that you were running with only 2 ambient bounces (this is practically an order of magnitude larger than 0.2%).
To address your unease I will say that, for a long time, I also felt uneasy any time that I encountered something that seemed unpredictable in software that I was using. Once I started coding my own stuff, though, I realized quickly that unpredictable behavior is an unavoidable aspect of all software. There is always a tradeoff between accurate results and the time it takes to get them, which produces a multitude of possible ways to arrive at a solution. Add into this complex situation the fact that you might have an almost infinite number of possible inputs to a given set of code.
Because of the unpredictable multitude of cases, there is no application that is completely free from limitations and assumptions. In this light, what ends up being more important than the actual calculation method used is the social infrastructure that is in place to help understand what is being run under the hood, hence why both Radiance and Honeybee are open source and why we try to build a robust community of support through forums like this one!
-Chris…
ifically, in your picture, it looks like you're feeding two different pieces of data into the same Data input (D0) of the Anemone Loop Start component. If you zoom in on the component in Grasshopper, you'll see that you can add and subtract Data inputs via little +/- symbols, so you can have D0, D1, D2, etc. (Note: when you do this, Anemone Loop End will return an error if it doesn't have the same amount of Data inputs as the Loop Start, so be sure to add them there as well.) Attaching your original data to different inputs keeps them nicely separated during the looped Anemone process.
The nature (and usefulness) of Anemone is that it allows you to take data output by some functions and use it as the input for that same set of functions (normally forbidden under usual Grasshopper logic). So let's say that you want to take a sphere(Sphere0) and stack progressively smaller versions of that sphere on top of it. You feed the sphere into [Loop Start] as D0, and right away, it comes out of the [Loop Start] D0 output exactly the same, because nothing has happened to it yet. You take Sphere0 from the D0 output, let's say scale it by .8, and transform it up appropriately so it sits on top of the last sphere. Now you have Sphere1! Feed Sphere1 into the D0 input of [Loop End], and now (if the # of repeats allows) Sphere1 is the D0 output of [Loop Start]. So if it goes again, it'll scale and transform Sphere1, resulting in a smaller Sphere2, and so on and so forth for as long as you want. If you right-click on the [Loop End] component, you'll see some options labelled "Output after the last" and "Record Data". If neither option is checked, then you'll see the loop calculating in real time, and the only thing that will come out of the D0 output for [Loop End] is the smallest sphere. If you check only "Record Data," then D0 will contain all of the spheres made from the loops. If you check only "Output after the last," then you won't see anything output to D0 until it's entirely finished calculating all the loops. If you check both options, then D0 will output all the spheres, but only after it's finished calculating everything.
In my snake pictured here, there is a constant # of scales placed around each loop of the tube, let's say 10. But since the tube has variable circumferences, the size of the scales needs to vary based on the circumference of their loop. Furthermore, since the size of the scales varies, the distance between each loop must also vary so that there aren't unsightly gaps between loops. So you take the length of Loop0 and divide it by 20 (2 times the # of scales, since you only use every other scale to achieve this pattern), and use that as the distance between Loop0 and Loop1. But since Loop1 has a smaller circumference, Loop1 divided by 20 is going to yield a smaller number than the first one, and that's why you need to use Anemone to make a loop to find all of this out.
This might be more granular than you wanted, but I hope that some of it helps.
…